2009-7-26 1
形式语言与自动机理论
Formal Languages and Automata
Theory
蒋宗礼
2009-7-26 2
课程目的和基本要求
课程性质
– 技术基础
基础知识要求
– 数学分析(或者高等数学),离散数学
主要特点
– 抽象和形式化
– 理论证明和构造性
– 基本模型的建立与性质
2009-7-26 3
课程目的和基本要求
本专业人员 4种基本的专业能力
– 计算思维能力
– 算法的设计与分析能力
– 程序设计和实现能力
– 计算机软硬件系统的认知、分析、设计与应用能力
计算思维能力
– 逻辑思维能力和抽象思维能力
– 构造模型对问题进行形式化描述
– 理解和处理形式模型
2009-7-26 4
课程目的和基本要求
知识
– 掌握正则语言、下文无关语言的文法、识别模型及其基本性质、图灵机的基本知识。
能力
– 培养学生的形式化描述和抽象思维能力。
– 使学生了解和初步掌握,问题、形式化描述、
自动化(计算机化),这一最典型的计算机问题求解思路。
2009-7-26 5
主要内容
语言的 文法 描述 。
RL
– RG,FA,RE,RL的性质 。
CFL
– CFG(CNF,GNF),PDA,CFL的性质 。
TM
– 基本 TM,构造技术,TM的修改 。
CSL
– CSG,LBA。
2009-7-26 6
教材及主要参考书目
1.蒋宗礼,姜守旭,形式语言与自动机理论,北京:
清华大学出版社,2003年
2,John E Hopcroft,Rajeev Motwani,Jeffrey D
Ullman,Introduction to Automata Theory,
Languages,and Computation (2nd Edition).
Addison-Wesley Publishing Company,2001
3,John E Hopcroft,Jeffrey D Ullman,Introduction
to Automata Theory,Languages,and
Computation,Addison-Wesley Publishing
Company,1979
2009-7-26 7
第 1章 绪论
1.1 集合的基础知识
1.1.1 集合及其表示
– 集合:一定范围内的,确定的,并且彼此可以区分的对象汇集在一起形成的整体叫做 集合 (set),
简称为集 (set)。
– 元素:集合的成员为该集合的 元素 (element)。
– 集合描述形式 。
– 基数 。
– 集合的分类 。
2009-7-26 8
1.1.2 集合之间的关系
子集
如果集合 A中的每个元素都是集合 B的元素,
则称集合 A是集合 B的 子集 (subset),集合 B是集合 A的 包集 (container)。 记作 A?B。 也可记作 B?A。 A?B读作集合 A包含在集合 B中;
B?A读作集合 B包含集合 A。
如果 A?B,且?x∈ B,但 x?A,则称 A是 B的真子集 (proper subset),记作 A?B
2009-7-26 9
1.1.2 集合之间的关系
集合相等
– 如果集合 A,B含有的元素完全相同,则称集合 A与集合 B相等 (equivalence),记作 A=B。
对任意集合 A,B,C:
⑴ A=B iff A?B且 B?A。
⑵ 如果 A?B,则 |A|≤|B|。
⑶ 如果 A?B,则 |A|≤|B|。
⑷ 如果 A是有穷集,且 A?B,则 |B|>|A|。
2009-7-26 10
1.1.2 集合之间的关系
⑸ 如果 A?B,则对?x∈ A,有 x∈ B。
⑹ 如果 A?B,则对? x∈ A,有 x∈ B并且
x∈ B,但 x?A。
⑺ 如果 A?B且 B?C,则 A?C。
⑻ 如果 A?B且 B?C,或者 A?B且 B?C,或者
A?B且 B?C,则 A?C。
⑼ 如果 A=B,则 |A|=|B|。
2009-7-26 11
1.1.3 集合的运算
并 (union)
A与 B的 并 (union)是一个集合,该集合中的元素要么是 A的元素,要么是 B的元素,记作 A∪ B。
A∪ B={a|a∈ A或者 a∈ B}
A1∪ A2∪ … ∪ An={a|?i,1? i? n,使得 a∈ Ai}
A1∪ A2∪ … ∪ An ∪ … ={a|?i,i∈ N,使得 a∈ Ai}
1i
iA
},|{ AaSAaA
SA
2009-7-26 12
交 (intersection)
集合 A和 B中都有的所有元素放在一起构成的集合为 A与 B的 交,记作 A∩ B。
A∩ B={a|a∈ A且 a∈ B}
,∩,为交运算符,A∩ B读作 A交 B。
如果 A∩ B=Φ,则称 A与 B不相交 。
⑴ A∩B=B∩A。
⑵ (A∩B)∩C=A∩(B∩C)。
⑶ A∩A=A。
2009-7-26 13
交 (intersection)
⑷ A∩B=A iff A?B。
⑸ Φ∩A=Φ。
⑹ |A∩B|≤min{|A|,|B|}。
⑺ A∩(B∪ C)=(A∩B)∪ (A∩C)。
⑻ A∪ (B∩C)=(A∪ B)∩(A∪ C)。
⑼ A∩(A∪ B)=A。
⑽ A∪ (A∩B)=A。
2009-7-26 14
差 (difference)
属于 A,但不属于 B的所有元素组成的集合叫做 A
与 B的 差,记作 A-B。
A-B={a|a∈ A且 a?B}
,-”为减 (差 )运算符,A-B读作 A减 B。
⑴ A-A=Φ。
⑵ A-Φ=A。
⑶ A-B ≠ B-A。
⑷ A-B=A iff A∩B=Φ。
⑸ A∩(B-C)=(A∩B)-(A∩C)。
⑹ |A-B|≤|A|。
2009-7-26 15
对称差 (symmetric difference)
属于 A但不属于 B,属于 B但不属于 A的所有元素组成的集合叫 A与 B的 对称差,记作 A⊕B 。
A⊕B={a|a∈A 且 a?B或者 a?A且 a∈B}
,⊕,为对称差运算符 。 A⊕B 读作 A对称减 B。
A⊕B=(A∪B) -(A∩B)=(A -B)∪(B -A)。
2009-7-26 16
笛卡儿积 (Cartesian product)
A与 B的 笛卡儿积 (Cartesian product)是一个集合,
该集合是由所有这样的有序对 (a,b)组成的:其中 a∈ A,b∈ B,记作 A×B。
A×B={(a,b)|a∈ A& b∈ B }。
,×”为笛卡儿乘运算符 。 A×B读作 A叉乘 B。
⑴ A×B≠ B×A。
⑵ (A×B)×C≠ A×(B×C)。
⑶ A×A≠ A。
⑷ A×Φ =Φ。
2009-7-26 17
笛卡儿积 (Cartesian product)
⑸ A×(B∪ C)=(A×B)∪ (A×C)。
⑹ (B∪ C)×A=(B×A)∪ (A×C)。
⑺ A×(B∩ C)=(A×B)∩ (A×C)。
⑻ (B∩ C)×A=(B×A)∩ (C×A)。
⑼ A×(B-C)=(A×B)-(A×C)。
⑽ (B-C)×A=(B×A)-(C×A)。
⑾ 当 A,B为有穷集时,|A×B|=|A|*|B|。
2009-7-26 18
幂集 (power set)
A幂集 (power set)是一个集合,该集合是由 A的所有子集组成的,记作 2A。
2A={B|B?A}。
2A读作 A的幂集。
2009-7-26 19
幂集 (power set)
⑴ Φ∈ 2A。
⑵ Φ?2A。
⑶ Φ?2A。
⑷ 2Φ={Φ}。
⑸ A∈ 2A。
⑹ 如果 A是有穷集,则 |2A|=2|A|。
⑺ 2A∩B=2A∩2B。
⑻ 如果 A?B,则 2A?2B。
2009-7-26 20
补集 (complementary set)
A是论域 U上的一个集合,A补集 是由 U中的、
不在 A中的所有元素组成的集合,记作
AUA
U
U
2009-7-26 21
补集 (complementary set)
AA?
BAUBAAB &
BABA
BABA
AB?
UAA
如果 A?B,则 。
。
。
。
。
。
2009-7-26 22
1.2 关系
二元关系
递归定义与归纳证明
关系的闭包
2009-7-26 23
1.2.1 二元关系 (binary relation)
二元关系
– 任意的 R?A×B,R是 A到 B的 二元关系。
– (a,b) ∈ R,也可表示为,aRb。
– A称为 定义域 (domain),B称为 值域 (range)。
– 当 A=B时,则称 R是 A上的二元关系。
二元关系的性质
– 自反 (reflexive)性、反自反 (irreflexive)性、对称
(symmetric)性、反对称 (asymmetric)性、传递
(transitive)性。
2009-7-26 24
1.2.1 二元关系 (binary relation)
三歧性
–自反性、对称性、传递性。
等价关系 (equivalence relation)
–具有三歧性的二元关系称为 等价关系。
2009-7-26 25
1.2.1 二元关系 (binary relation)
等价类 (equivalence class)
S的满足如下要求的划分,S1,S2,S3,…,Sn… 称为 S关于 R的等价划分,Si称为等价类。
⑴ S= S1∪ S2∪ S3∪ … ∪ Sn∪ … ;
⑵ 如果 i≠j,则 Si∩Sj=Φ;
⑶ 对任意的 i,Si中的任意两个元素 a,b,aRb恒成立;
⑷ 对任意的 i,j,i≠j,Si中的任意元素 a和 Sj中的任意元素 b,aRb恒不成立
2009-7-26 26
1.2.1 二元关系 (binary relation)
指数 (index)
– 把 R将 S分成的等价类的个数称为是 R在 S上的指数 。如果 R将 S分成有穷多个等价类,则称 R
具有有穷指数;如果 R将 S分成无穷多个等价类,
则称 R具有无穷指数。
– 给定集合 S上的一个等价关系 R,R就确定了 S
的一个等价分类,当给定另一个不同的等价关系时,它会确定 S的一个新的等价分类。
2009-7-26 27
1.2.1 二元关系 (binary relation)
关系的合成 (composition)
设 R1?A× B是 A到 B的关系,R2?B× C是 B到
C的关系,R1与 R2的 合成 R1R2是 A到 C的关系:
R1R2={(a,c)|?(a,b) ∈ R1且 (b,c) ∈ R2 。
2009-7-26 28
1.2.1 二元关系 (binary relation)
⑴ R1R2≠R2R1。
⑵ (R1R2)R3=R1(R2R3)。 (结合率 )
⑶ (R1∪ R2)R3=R1R3∪ R2R3。 (右分配率 )
⑷ R3(R1∪ R2)=R3R1∪ R3R2。 (左分配率 )
⑸ (R1∩R2)R3?R1R3∩R2R3。
⑹ R3(R1∩R2)?R3R1∩R3R2。
2009-7-26 29
1.2.1 二元关系 (binary relation)
1,关系这一个概念用来反映对象 ——集合元素之间的联系和性质
2,二元关系则是反映两个元素之间的关系,
包括某个元素的某种属性 。
3,对二元关系的性质,要强调全称量词是对什么样的范围而言的 。
2009-7-26 30
1.2.2 等价关系与等价类 (略)
1.2.3 关系的合成 (略)
2009-7-26 31
1.2.4 递归定义与归纳证明
递归定义 (recursive definition)
– 又称为 归纳定义 (inductive definition),它来定义一个集合。
– 集合的递归定义由三部分组成:
基础 (basis):用来定义该集合的最基本的元素。
归纳 (induction):指出用集合中的元素来构造集合的新元素的规则。
极小性限定:指出一个对象是所定义集合中的元素的充要条件是它可以通过有限次的使用基础和归纳条款中所给的规定构造出来。
2009-7-26 32
1.2.4 递归定义与归纳证明
归纳证明
– 与递归定义相对应。
– 归纳证明方法包括三大步:
基础 (basis):证明最基本元素具有相应性质。
归纳 (induction):证明如果某些元素具有相应性质,则根据这些元素用所规定的方法得到的新元素也具有相应的性质。
根据归纳法原理,所有的元素具有相应的性质。
2009-7-26 33
1.2.4 递归定义与归纳证明
定义 1-17
设 R是 S上的关系,我们递归地定义 Rn的幂:
⑴ R0={(a,a)|a∈ S}。
⑵ Ri=Ri-1R (i=1,2,3,4,5,…) 。
2009-7-26 34
1.2.4 递归定义与归纳证明例 1-17 著名的斐波那契 (Fibonacci)数的定义
⑴ 基础,0是第一个斐波那契数,1第二个斐波那契数;
⑵ 归纳:如果 n是第 i个斐波那契数,m是第 i+1
个斐波那契数,则 n+m是第 i+2个斐波那契数,
这里 i为大于等于 1的正整数 。
⑶ 只有满足 (1)和 (2)的数才是斐波那契数
0,1,1,2,3,5,8,13,21,34,
55,…
2009-7-26 35
1.2.4 递归定义与归纳证明例 1-18算术表达式
⑴ 基础:常数是算术表达式,变量是算术表达式;
⑵ 归纳:如果 E1,E2是表达式,则 +E1,-E1、
E1+E2,E1-E2,E1*E2,E1/E2,E1**E2、
Fun(E1)是算术表达式 。 其中 Fun为函数名 。
⑶ 只有满足 (1)和 (2)的才是算术表达式。
2009-7-26 36
1.2.4 递归定义与归纳证明例 1-19对有穷集合 A,证明 |2A|=2|A|。
证明:
设 A为一个有穷集合,施归纳于 |A|:
⑴ 基础:当 |A|=0时,|2A|=|{Φ}|=1。
⑵ 归纳:假设 |A|=n时结论成立,这里 n ≥0,
往证当 |A|=n+1时结论成立
2A=2B∪ {C∪ {a}|C∈ 2B}
2B∩{C∪ {a}|C∈ 2B}=Φ
2009-7-26 37
1.2.4 递归定义与归纳证明
|2A|=|2B∪ {C∪ {a}|C∈ 2B}|
=|2B|+|{C∪ {a}|C∈ 2B}|
=|2B|+|2B|
=2*|2B|
=2*2|B|
=2|B|+1
=2|A|
⑶ 由归纳法原理,结论对任意有穷集合成立 。
2009-7-26 38
1.2.4 递归定义与归纳证明例 1-20 表达式的前缀形式是指将运算符写在前面,后跟相应的运算对象。如,+E1的前缀形式为 +E1,E1+E2的前缀形式为 +E1E2,
E1*E2的前缀形式为 *E1E2,E1**E2的前缀形式为 ** E1,Fun(E1) 的前缀形式为 FunE1 。
证明例 1-18所定义的表达式可以用这里定义的前缀形式表示。
2009-7-26 39
1.2.4 递归定义与归纳证明
递归定义给出的概念有利于归纳证明。在计算机科学与技术学科中,有许多问题可以用递归定义描述或者用归纳方法进行证明,而且在许多时候,这样做会带来许多方便。
主要是掌握 递归定义与归纳证明 的叙述格式。
2009-7-26 40
1.2.5 关系的闭包
闭包 (closure)
– 设 P是关于关系的性质的集合,关系 R的 P闭包
(closure)是包含 R并且具有 P中所有性质的最小关系 。
正闭包 (positive closure)
(1)R?R+。
(2)如果 (a,b),(b,c)∈ R+ 则 (a,c)∈ R+。
(3)除 (1),(2)外,R+不再含有其他任何元素 。
2009-7-26 41
1.2.5 关系的闭包
传递闭包 (transitive closure)
– 具有传递性的闭包 。
– R+具有传递性 。
可以证明,对任意二元关系 R,
R+= R∪ R2∪ R3∪ R4∪ …
而且当 S为有穷集时:
R+= R∪ R2∪ R3∪ … ∪ R|S|
2009-7-26 42
1.2.5 关系的闭包
克林闭包 (Kleene closure) R*
(1) R0? R*,R? R*。
(2) 如果 (a,b),(b,c)∈R * 则 (a,c)∈R *。
(3) 除 (1),(2)外,R*不再含有其他任何元素。
自反传递闭包 (reflexive and transitive
closure)
R*具有自反性、传递性 。
2009-7-26 43
1.2.5 关系的闭包
可以证明,对任意二元关系 R,
R*= R0∪ R+
R* =R0∪ R∪ R2∪ R3∪ R4∪ …
而且当 S为有穷集时:
R*= R0∪ R∪ R2∪ R3∪ … ∪ R|S|
2009-7-26 44
1.2.5 关系的闭包
R1,R2是 S上的两个二元关系
(1) Φ+=Φ。
(2) (R1+)+= R1+。
(3) (R1*)*= R1*。
(4) R1+∪ R2+?(R1∪ R2)+。
(5) R1*∪ R2*?(R1∪ R2)*。
2009-7-26 45
1.3 图
数学家欧拉 (L.Euler)解决著名的哥尼斯堡七桥。
直观地讲,图是由一些点和一些连接两点的边组成。
含无方向的边的图为无向图,含带有方向的边的图为有向图。
2009-7-26 46
1.3.1 无向图
无向图 (undirected graph)
– 设 V是一个非空的有穷集合,E?V×V,G=(V,
E)称为 无向图 (undirected graph)。其中 V中的元素称为 顶点 (vertex或 node),V称为顶点集,
E中的元素称为 无向边 (undirected edge),E为无向边集。
图表示
– V中称为顶点 v的元素用标记为 v的小圈表示,E
中的元素 (v1,v2)用标记为 v1,v2的顶点之间的连线表示。
2009-7-26 47
1.3.1 无向图
路 (path)
– 如果对于 0≤i≤k-1,k≥1,均有 (vi,vi+1)∈ E,则称 v0,v1,…,vk是 G=(V,E)的一条长为 k的路。
回路或圈 (cycle)
– 当路 v0,v1,…,vk中 v0=vk时,v0,v1,…,vk
叫做一个 回路或圈 (cycle)。
2009-7-26 48
1.3.1 无向图
顶点的度数
– 对于 v∈ V,|{v|(v,w)∈ E}|称为无向图 G=(V,
E)的顶点 v的度数,记作 deg(v)。
– 对于任何一个图,图中所有顶点的度数之和为图中边的 2倍。
Vv
Ev ||*2)d e g (
2009-7-26 49
deg(v1)=3
deg(v2)=3
deg(v3)=4
deg(v4)=3
deg(v5)=3
deg(v1)+deg(v2)+deg(v3)+deg(v4)+deg(v5)=16
2009-7-26 50
1.3.1 无向图
连通图
– 如果对于?v,w∈ V,v≠w,v与 w之间至少有一条路存在,则称 G=(V,E)是 连通图 。
– 图 G是连通的充要条件是 G中存在一条包含图的所有顶点的路。
2009-7-26 51
1.3.2 有向图
有向图 (directed graph)
– G=(V,E)。
– V,顶点 (vertex或 node)集。
– (v1,v2)∈ E,顶点 v1到顶点 v2的 有向边
(directed edge),或 弧 (arc),v1称为 前导
(predecessor),v2称为 后继 (successor)。
有向路 (directed path)
– 如果对于 0? i? k-1,k? 1,均有 (vi,vi+1)∈ E,
则称 v0,v1,…,vk是 G的一条长为 k的 有向路。
2009-7-26 52
1.3.2 有向图
有向回路或有向圈 (directed cycle)
– 对于 0? i? k-1,k? 1,均有 (vi,vi+1)∈ E,且
v0=vk,则称 v0,v1,…,vk是 G的一条长为 k的有向路为 一个 有向回路。
– 有向回路又叫有向圈。
有向图的图表示
– 图 G的图表示是满足下列条件的,图,,其中 V
中称为顶点 v的元素用标记为 v的小圈表示,E
中的元素 (v1,v2)用从标记为 v1的顶点到标记为 v2的顶点的弧表示。
2009-7-26 53
1.3.2 有向图
顶点的度数
– 入度 (数 ),ideg(v)=|{v|(w,v)∈ E}|。
– 出度 (数 ),odeg(v)= |{v|(v,w)∈ E}|。
对于任何一个有向图,图中所有顶点的入度之和与图中所有顶点的出度之和正好是图中边的个数
VvVv
Evovi ||)d e g ()d e g (
2009-7-26 54
两个不同的有向图
2009-7-26 55
1.3.3 树
满足如下条件的有向图 G=(V,E)称为一棵
(有序、有向 )树 (tree):
– 根 (root) v,没有前导,且 v到树中其他顶点均有一条有向路。
– 每个非根顶点有且仅有一个前导。
– 每个顶点的后继按其拓扑关系从左到右排序。
2009-7-26 56
1.3.3 树
树的基本概念
(1) 顶点也可以成为结点。
(2) 结点的前导为该结点的 父亲 (父结点 father)。
(3) 结点的后继为它的 儿子 (son)。
(4) 如果树中有一条从结点 v1到结点 v2的路,则称
v1是 v2的 祖先 (ancestor),v2是 v1的 后代 (descendant)。
(5) 无儿子的顶点叫做 叶子 (leaf)。
(6) 非叶结点叫做 中间结点 (interior)。
2009-7-26 57
1.3.3 树
树的层
– 根处在树的第 1层 (level)。
– 如果结点 v处在第 i层 (i? 1),则 v的儿子处在第
i+1层 。
– 树的最大层号叫做该树的高度 (height)。
2009-7-26 58
1.3.3 树
二元树
– 如果对于?v∈ V,v最多只有 2个儿子,则称
G=(V,E)为 二元树 (binary tree)。
– 对一棵二元树,它的第 n层最多有 2n-1个结点。
一棵 n层二元树最多有个 2n-1叶子。
2009-7-26 59
1.4 语言
1.4.1 什么是语言
例如:,学大一生是个我,;,我是一个大学生,。
语言是一定的群体用来进行交流的工具。
必须有着一系列的生成规则、理解 (语义 )
规则 。
2009-7-26 60
1.4.1 什么是语言
2009-7-26 61
1.4.1 什么是语言
斯大林:从强调语言的作用出发,把语言定义为,为广大的人群所理解的字和组合这些字的方法,。
语言学家韦波斯特 (Webster),为相当大的团体的人所懂得并使用的字和组合这些字的方法的统一体。
要想对语言的性质进行研究,用这些定义来建立语言的数学模型是不够精确的。必须有更形式化的定义。
2009-7-26 62
1.4.2 形式语言与自动机理论的产生与作用
语言学家乔姆斯基,毕业于宾西法尼亚大学,最初从产生语言的角度研究语言。
1956年,他将语言 L定义为一个字母表 ∑ 中的字母组成的一些串的集合,L?∑ *。
字母表上按照一定的规则定义一个文法
(grammar),该文法所能产生的所有句子组成的集合就是该文法产生的语言。
1959年,乔姆斯基根据产生语言文法的特性,将语言划分成 3大类。
2009-7-26 63
1.4.2 形式语言与自动机理论的产生与作用
1951年到 1956年,克林 (Kleene) 在研究神经细胞中,建立了识别语言的系统 ——有穷状态自动机。
1959年,乔姆斯基发现文法和自动机分别从生成和识别的角度去表达语言,而且证明了文法与自动机的等价性,这一成果被认为是将形式语言置于了数学的光芒之下,
使得形式语言真正诞生了。
2009-7-26 64
1.4.2 形式语言与自动机理论的产生与作用
20世纪 50年代,巴科斯范式 (Backus Nour
Form 或 Backus Normal Form,BNF)实现了对高级语言 ALGOL-60的成功描述。这一成功,使得形式语言在 20世纪 60年代得到了大力的发展。尤其是上下文无关文法被作为计算机程序设计语言的文法的最佳近似描述得到了较为深入的研究。
相应的理论用于其他方面。
2009-7-26 65
1.4.2 形式语言与自动机理论的产生与作用
形式语言与自动机理论在计算机科学与技术学科的人才的计算思维的培养中占有极其重要的地位。
计算学科的主题:,什么能被有效地自动化,。
2009-7-26 66
1.4.2 形式语言与自动机理论的产生与作用
计算机科学与技术学科人才专业能力构成
–,计算思维能力,——抽象思维能力、逻辑思维能力。
– 算法设计与分析能力 。
– 程序设计与实现能力 。
– 计算机系统的认知、分析、设计和应用能力。
2009-7-26 67
1.4.2 形式语言与自动机理论的产生与作用
2009-7-26 68
1.4.2 形式语言与自动机理论的产生与作用
考虑的对象的不同,所需要的思维方式和能力就不同,通过这一系统的教育,在不断升华的过程中,
逐渐地培养出了学生的抽象思维能力和对逻辑思维方法的掌握。
创新意识的建立和创新能力的培养也在这个教育过程中循序渐进地进行着。
内容用于后续课程和今后的研究工作。
是进行思维训练的最佳知识载体。
是一个优秀的计算机科学工作者必修的一门课程。
2009-7-26 69
1.4.3 基本概念
对语言研究的三个方面
– 表示 (representation)—— 无穷语言的表示。
– 有穷描述 (finite description) ——研究的语言要么是有穷的,要么是可数无穷的,这里主要研究可数无穷语言的有穷描述。
– 结构 (structure)——语言的结构特征。
2009-7-26 70
1.4.3 基本概念
字母表 (alphabet)
– 字母表 是一个非空有穷集合,字母表中的元素称为该字母表的一个 字母 (letter)。又叫做 符号
(symbol)、或者 字符 (character)。
– 非空性。
– 有穷性。
例如:
{a,b,c,d}
{ a,b,c,…,z}
{0,1}
2009-7-26 71
1.4.3 基本概念
字符的两个特性
– 整体性 (monolith),也叫不可分性。
– 可辨认性 (distinguishable),也叫可区分性。
例(续)
{a,a′,b,b′}
{aa,ab,bb}
{∞,∧,∨,≥,≤}
2009-7-26 72
1.4.3 基本概念
字母表的乘积 (product)
∑1∑2={ab|a∈ ∑1,b∈ ∑2}
例如:
{0,1}{0,1}={00,01,10,00}
{0,1}{a,b,c,d}={0a,0b,0c,0d,1a,1b,
1c,1d}
{a,b,c,d}{0,1}={a0,a1,b0,b1,c0,c1,
d0,d1}
{aa,ab,bb}{0,1}={ aa0,aa1,ab0,ab1,bb0,
bb1}
2009-7-26 73
1.4.3 基本概念
字母表 ∑的 n次 幂
∑0={ε}
∑n=∑n-1∑
ε是由 ∑中的 0个字符组成的。
∑的 正闭包
∑+=∑∪ ∑2∪ ∑3∪ ∑4∪ …
∑的 克林闭包
∑*=∑0∪ ∑+=∑0∪ ∑∪ ∑2∪ ∑3∪ …
2009-7-26 74
1.4.3 基本概念
例如:
{0,1}+={0,1,00,01,11,000,001,010,011,
100,…}
{0,1}*={ε,0,1,00,01,11,000,001,010,
011,100,…}
{a,b,c,d}+={a,b,c,d,aa,ab,ac,ad,ba,
bb,bc,bd,…,aaa,aab,aac,aad,aba,abb,
abc,…}
{a,b,c,d}*={ε,a,b,c,d,aa,ab,ac,ad,
ba,bb,bc,bd,…,aaa,aab,aac,aad,aba,
abb,abc,…}
2009-7-26 75
1.4.3 基本概念
结论:
∑*={x|x是 ∑中的若干个,包括 0个字符,连接而成的一个字符串 }。
∑+={x|x是 ∑中的至少一个字符连接而成的字符串 }。
2009-7-26 76
1.4.3 基本概念
句子 (sentence)
∑是一个字母表,?x∈ ∑*,x叫做 ∑上的一个 句子。
句子相等。
两个句子被称为相等的,如果它们对应位置上的字符都对应相等。
别称字 (word),(字符、符号 )行 (line),(字符、符号 )串
(string)。
2009-7-26 77
1.4.3 基本概念
出现 (apperance)
– x,y∈ ∑*,a∈ ∑,句子 xay中的 a叫做 a在该句子中的一个 出现。
– 当 x=ε时,a的这个出现为字符串 xay的首字符
– 如果 a的这个出现是字符串 xay的第 n个字符,
则 y的首字符的这个出现是字符串 xay的第 n+1
个字符。
– 当 y=ε时,a的这个出现是字符串 xay的尾字符
– 例,abaabb。
2009-7-26 78
1.4.3 基本概念
句子的长度 (length)
–?x∈ ∑*,句子 x中字符出现的总个数叫做该 句子的长度,记作 |x|。
– 长度为 0的字符串叫 空句子,记作 ε。
例如:
|abaabb|=6
|bbaa|=4
|ε|=0
|bbabaabbbaa|=11
2009-7-26 79
1.4.3 基本概念
注意事项
– ε是一个句子。
– {ε}≠Φ。这是因为 {ε}不是一个空集,它是含有一个空句子 ε的集合。 |{ε}|=1,而 |Φ|=0。
2009-7-26 80
1.4.3 基本概念
并置 (concatenation)
– x,y∈ ∑*,x,y的 并置 是由串 x直接相接串 y所组成的。记作 xy。并置又叫做 连结。
串 x的 n次 幂
x0=ε
xn=xn-1x
2009-7-26 81
1.4.3 基本概念
例 如:
– 对 x=001,y=1101
x0=y0=ε
x4=001001001001
y4=1101110111011101
– 对 x=0101,y=110110
x2=01010101
y2=110110110110
x4=0101010101010101
y4=110110110110110110110110
2009-7-26 82
1.4.3 基本概念
∑*上的并置运算性质
⑴ 结合律,(xy)z=x(yz)。
⑵ 左消去律:如果 xy=xz,则 y=z。
⑶ 右消去律:如果 yx=zx,则 y=z。
⑷ 惟一分解性:存在惟一确定的 a1,a2,…,
an∈ ∑,使得 x= a1a2… an。
⑸ 单位元素,εx=xε=x。
2009-7-26 83
1.4.3 基本概念
前缀与后缀设 x,y,z,w,v∈ ∑*,且 x=yz,w=yv
(1) y是 x的前缀 (prefix)。
(2)如果 z≠ε,则 y是 x的真前缀 (proper prefix)。
(3) z是 x的后缀 (suffix);
(4) 如果 y≠ε,则 z是 x的真后缀 (proper suffix)。
(5) y是 x和 w的公共前缀 (common Prefix)。
2009-7-26 84
1.4.3 基本概念
公共 前缀与后缀
(6)如果 x和 w的任何公共前缀都是 y的前缀,则 y是 x和 w
的最大公共前缀。
(7) 如果 x=zy,w=vy,则 y是 x和 w的公共后缀 (common
suffix )。
(8)如果 x和 w的任何公共后缀都是 y的后缀,则 y是 x和 w
的最大公共后缀。
2009-7-26 85
1.4.3 基本概念
例字母表 ∑={a,b}上的句子 abaabb的前缀,后缀,真前缀和真后缀如下:
前缀,ε,a,ab,aba,abaa,abaab,abaabb
真前缀,ε,a,ab,aba,abaa,abaab
后缀,ε,b,bb,abb,aabb,baabb,abaabb
真后缀,ε,b,bb,abb,aabb,baabb
2009-7-26 86
1.4.3 基本概念
结论
⑴ x的任意前缀 y有惟一的一个后缀 z与之对应,使得
x=yz;反之亦然 。
⑵ x的任意真前缀 y有惟一的一个真后缀 z与之对应,使得 x=yz;反之亦然 。
⑶ |{w|w是 x的后缀 }|=|{w|w是 x的前缀 }|。
⑷ |{w|w是 x的真后缀 }|=|{w|w是 x的真前缀 }|。
⑸ {w|w是 x的前缀 }={w|w是 x的真前缀 }∪ {x},
|{w|w是 x的前缀 }|=|{w|w是 x的真前缀 }|+1。
2009-7-26 87
1.4.3 基本概念
结论
⑹ {w|w是 x的后缀 }={w|w是 x的真后缀 }∪ {x},
|{w|w是 x的后缀 }|=|{w|w是 x的真后缀 }|+1。
⑺ 对于任意字符串 w,w是自身的前缀,但不是自身的真前缀; w是自身的后缀,但不是自身的真后缀 。
⑻ 对于任意字符串 w,ε是 w的前缀,且是 w的真前缀; ε是 w的后缀,且是 w的真后缀
2009-7-26 88
1.4.3 基本概念
约定
⑴ 用小写字母表中较为靠前的字母 a,b,
c,… 表示字母表中的字母 。
⑵ 用小写字母表中较为靠后的字母 x,y,
z,… 表示字母表上的句子 。
⑶ 用 xT表示 x的倒序。例如,如果 x=abc,则
xT=cba。
2009-7-26 89
1.4.3 基本概念
子串 (substring)
– w,x,y,z∈ ∑*,且 w=xyz,则称 y是 w的 子串。
公共子串 (common substring)
– t,u,v,w,x,y,z∈ ∑*,且 t=uyv,w=xyz,
则称 y是 t和 w的 公共子串 (common substring)。
如果 y1,y2,……,yn是 t和 w的公共子串,且
max{|y1|,|y2|,…,|yn|}=|yj|,则称 yj是 t和 w的最大公共子串。
– 两个串的最大公共子串并不一定是惟一的。
2009-7-26 90
1.4.3 基本概念
语言 (language)
L?∑*,L称为字母表 ∑上的一个 语言
(language),?x∈ L,x叫做 L的一个句子。
例,{0,1}上的不同语言
{00,11},{0,1}
{0,1,00,11},{0,1,00,11,01,10}
{00,11}*,{01,10}*,{00,01,10,11}*,
{0}{0,1}*{1},{0,1}*{111}{0,1}*
2009-7-26 91
1.4.3 基本概念
语言的 乘积 (product)
L1?∑1*,L2?∑2*,语言 L1与 L2的 乘积 是一个语言,该语言定义为:
L1L2={xy| x∈ L1,y∈ L2}
是字母表 ∑1∪ ∑2上的语言。
2009-7-26 92
1.4.3 基本概念
例
⑴ L1={0,1}。
⑵ L2={00,01,10,11}。
⑶ L3={0,1,00,01,10,11,000,… }=∑+。
⑷ L4={ε,0,1,00,01,10,11,000,… }=∑*。
⑸ L5={0n|n≥1}。
⑹ L6={0n1n|n≥1}。
⑺ L7={1n|n≥1}。
⑻ L8={0n1m|n,m≥1}。
⑼ L9={0n1n0n|n≥1}。
⑽ L10={0n1m0k|n,m,k≥1}。
⑾ L11={x|x∈ ∑+且 x中 0和 1的个数相同 }。
2009-7-26 93
1.4.3 基本概念
上述几个语言的部分特点及相互关系上述所有语言都是 L4的子集 (子语言 );
L1,L2是有穷语言;其他为无穷语言;其中 L1是 ∑
上的所有长度为 1的句子组成的语言,L2是 ∑ 上的所有长度为 2的句子组成的语言;
L3,L4分别是 ∑ 的正闭包和克林闭包;
L5L7≠ L6,但 L5L7= L8;同样 L9≠ L10,但是我们有,L6?L5L7,L9?L10。
2009-7-26 94
1.4.3 基本概念
L6={0n1n|n? 1}中的句子中的 0和 1的个数是相同的,并且所有的 0在所有的 1的前面,
L11={x|x∈∑ +且 x中 0和 1的个数相同 }中的句子中虽然保持着 0的个数和 1的个数相等,
但它并没要求所有的 0在所有的 1的前面 。
例如,0101,1100∈ L11,但是 0101? L6,
1100?L6。 而对?x∈ L6,有 x∈ L11。 所以,
L6?L11。
2009-7-26 95
1.4.3 基本概念
L1?L12,L2?L12
L5?L12,L6?L12
L7?L12,L8?L12
L9?L12,L10?L12
L1?L10,L2?L10
L5?L10,L6?L10
L7?L10,L8?L10
L9?L10,L10?L12
2009-7-26 96
1.4.3 基本概念
例
⑴ {x|x=xT,x∈∑ }。
⑵ {xxT|x∈∑ +}。
⑶ {xxT|x∈∑ *}。
⑷ {xwxT|x,w∈∑ +}。
⑸ {xxTw|x,w∈∑ +}。
2009-7-26 97
1.4.3 基本概念
幂
L∈∑ *,L的 n次 幂 是一个语言,该语言定义为
⑴ 当 n=0是,Ln={ε }。
⑵ 当 n? 1时,Ln= Ln-1L 。
正闭包
L+=L∪ L2∪ L3∪ L4∪ …
克林闭包
L*= L0∪ L∪ L2∪ L3∪ L4∪ …
2009-7-26 98
1.5 小结本章简单叙述了一些基础知识,一方面,希望读者通过对本章的阅读,熟悉集合、关系、图、形式语言等相关的一些基本知识点,为以后各章学习作适当的准备。另一方面,也使读者熟悉本书中一些符号的意义。
2009-7-26 99
1.5 小结
(1) 集合:集合的表示,集合之间的关系,集合的基本运算 。
(2) 关系:主要介绍了二元关系相关的内容 。
包括等价关系,等价分类,关系合成,关系闭包 。
(3) 递归定义与归纳证明 。
2009-7-26 100
1.5 小结
(4) 图:无向图,有向图,树的基本概念 。
(5) 语言与形式语言:自然语言的描述,形式语言和自动机理论的出现,形式语言和自动机理论对计算机科学与技术学科人才能力培养的作用
(6) 基本概念:字母表,字母,句子,字母表上的语言,语言的基本运算
2009-7-26 101
第 2章 文法
对任何语言 L,有一个字母表 ∑,使得 L?∑ * 。
L的具体组成结构是什么样的?
一个给定的字符串是否为一个给定语言的句子?如果不是,它在结构的什么地方出了错?进一步地,
这个错误是什么样的错?如何更正? …… 。
这些问题对有穷语言来说,比较容易解决。
这些问题对无穷语言来说,不太容易解决。
语言的有穷描述。
2009-7-26 102
第 2章 文法
主要内容文法的直观意义与形式定义,推导,文法产生的语言,句子,句型; 乔姆斯基 体系,左线性文法,右线性文法,文法的推导与归约;空语句 。
重点文法,推导,归约,模型的等价性证明 。
难点形式化的概念,文法的构造 。
2009-7-26 103
2.1 启示
文法的概念最早是由语言学家们在研究自然语言理解中完成形式化。
归纳如下句子的描述:
⑴ 哈尔滨是美丽的城市 。
⑵ 北京是祖国的首都 。
⑶ 集合是数学的基础 。
⑷ 形式语言是很抽象的 。
⑸ 教育走在社会发展的前面 。
⑹ 中国进入 WTO。
2009-7-26 104
2.1 启示
6个句子的主体结构
<名词短语 ><动词短语 ><句号 >
<名词短语 >={哈尔滨,北京,集合,形式语言,
教育,中国 }
<动词短语 >={是美丽的城市,是祖国的首都,是数学的基础,是很抽象的,走在社会发展的前面,进入 WTO}
<句号 >={。 }
2009-7-26 105
2.1 启示
<动词短语 >可以是 <动词 ><形容词短语 > 或者 <动词 ><名词短语 > 。
<名词短语 >={北京,哈尔滨,形式语言,中国,
教育,集合,WTO,美丽的城市,祖国的首都,
数学的基础,社会发展的前面 }。
<动词 >={是,走在,进入 }。
<形容词短语 >={很抽象的 }。
把 <名词短语 ><动词短语 ><句号 >取名为 <句子 >。
2009-7-26 106
2.1 启示
2009-7-26 107
2.1 启示
表示成 α?β 形式
<句子 >?<名词短语 ><动词短语 ><句号 >
<动词短语 >?<动词 ><形容词短语 >
<动词短语 >?<动词 ><名词短语 >
<动词 >?是
2009-7-26 108
2.1 启示
<动词 >?走在
<动词 >?进入
<形容词短语 >?很抽象的
<名词短语 >?北京
<名词短语 >?哈尔滨
<名词短语 >?形式语言
2009-7-26 109
2.1 启示
<名词短语 >?中国
<名词短语 >?教育
<名词短语 >?集合
<名词短语 >?WTO
<名词短语 >?美丽的城市
<名词短语 >?祖国的首都
<名词短语 >?数学的基础
<名词短语 >?社会发展的前面
<句号 >?。
2009-7-26 110
2.1 启示
表示一个语言,需要 4种东西
⑴形如 <名词短语 >的,符号,
它们表示相应语言结构中某个位置上可以出现的一些内容。每个,符号,对应的是一个集合,在该语言的一个具体句子中,句子的这个位置上能且仅能出现相应集合中的某个元素。所以,这种,符号,代表的是一个语法范畴。
⑵ <句子 >
所有的,规则,,都是为了说明 <句子 >的结构而存在,相当于说,定义的就是 <句子 >。
2009-7-26 111
2.1 启示
⑶ 形如北京的,符号,
它们是所定义语言的合法句子中将出现的,符号,。仅仅表示自身,称为终极符号 。
⑷所有的,规则,都呈 α?β 的形式在产生语言的句子中被使用,称这些,规则,
为产生式。
2009-7-26 112
2.2 形式定义
文法 (grammar)
G=(V,T,P,S)
– V——为 变量 (variable)的非空有穷集。
A∈ V,A叫做一个 语法变量 (syntactic
Variable),简称为变量,也可叫做 非终极符号 (nonterminal)。它表示一个 语法范畴 (syntactic Category)。所以,本文中有时候又称之为语法范畴 。
2009-7-26 113
2.2 形式定义
– T——为 终极符 (terminal)的非空有穷集。
a∈ T,a叫做终极符。由于 V中变量表示语法范畴,T中的字符是语言的句子中出现的字符,所以,有 V∩ T=Φ。
– S——S∈ V,为文法 G的 开始符号 (start
symbol)。
2009-7-26 114
2.2 形式定义
– P——为 产生式 (production)的非空有穷集合。 P中的元素均具有形式 α?β,
被称为产生式,读作,α 定义为 β 。其中 α ∈ (V∪ T)+,且 α 中至少有 V中元素的一个出现。 β ∈ (V∪ T)*。 α 称为产生式 α?β 的 左部,β 称为产生式 α?β
的 右部 。产生式又叫做定义式或者语法规则。
2009-7-26 115
2.2 形式定义
例 2-1 以下四元组都是文法。
⑴ ({A},{0,1},{A?01,A?0A1,A?1A0},A)。
⑵ ({A},{0,1},{A?0,A?0A},A)。
⑶ ({A,B},{0,1},{A?01,A?0A1,A?1A0,B?AB,
B?0},A)。
⑷ ({A,B},{0,1},{A?0,A?1,A?0A,A?1A },
A)。
2009-7-26 116
2.2 形式定义
⑸ ({S,A,B,C,D},{a,b,c,d,#},{S?ABCD,
S?abc#,A?aaA,AB?aabbB,BC?bbccC,
cC?cccC,CD?ccd#,CD?d#,CD?#d},S)。
⑹ ({S},{a,b},{S?00S,S?11S,S?00,S?11},
S)。
2009-7-26 117
2.2 形式定义
约定
⑴ 对一组有相同左部的产生式
α?β 1,α?β 2,…,α?β n
可以简单地记为:
α?β 1|β 2|… |β n
读作,α 定义为 β 1,或者 β 2,…,或者 β n。并且称它们为 α 产生式。 β 1,β 2,…,β n称为候选式 (candidate)。
2009-7-26 118
2.2 形式定义
⑵ 使用符号
英文字母表较为前面的大写字母,如 A,B,C,…
表示语法变量;
英文字母表较为前面的小写字母,如 a,b,c,…
表示终极符号;
英文字母表较为后面的大写字母,如 X,Y,Z,…
表示该符号是语法变量或者终极符号;
英文字母表较为后面的小写字母,如 x,y,z,…
表示由终极符号组成的行;
希腊字母 α,β,γ … 表示由语法变量和终极符号组成的行
2009-7-26 119
2.2 形式定义
例 2-3 四元组是否满足文法的要求。
– ({A,B,C,E},{a,b,c},{S?ABC|abc,D?e|a,
FB?c,A?A,E? abc|ε },S)
– 4种修改
(1) ({A,B,C,E,S,D,F},{a,b,c,e},
{S?ABC|abc,D?e|a,FB?c,A?A,E? abc|ε },
S)。
(2) ({A,B,C,E,S },{a,b,c},{S?ABC|abc,
A?A,E? abc|ε },S)。
(3) ({A,B,C,E},{a,b,c},{ A?A,E?
abc|ε },A)。
(4) ({A,B,C,E},{a,b,c},{ A?A,E?
abc|ε },E)。
2009-7-26 120
2.2 形式定义
推导 (derivation)
设 G=(V,T,P,S)是一个文法,如果 α?β ∈ P,
γ,δ ∈ (V∪ T)*,则称 γ α δ 在 G中直接推导出 γ β δ 。
γ α δ?G γ β δ
读作,γ α δ 在文法 G中直接推导出 γ β δ 。
,直接推导,可以简称为 推导 (derivation),也称推导为 派生。
2009-7-26 121
2.2 形式定义
归约 (reduction)
– γ α δ?G γ β δ
– 称 γ β δ 在文法 G中直接归约成 γ α δ 。在不特别强调归约的直接性时,,直接归约,可以简称为 归约。
2009-7-26 122
2.2 形式定义
1,推导与归约表达的意思的异同 。
2,推导与归约和产生式不一样 。 所以,?G
和?所表达的意思不一样 。
3,推导与归约是一一对应的 。
4,推导与归约的作用 。
2009-7-26 123
2.2 形式定义
G,?G+,?G*当成 (V∪ T)*上的二元关系。
(1)α?Gn β,表示 α 在 G中经过 n步推导出 β ;
β 在 G中经过 n步归约成 α 。即,存在 α 1,
α 2,…,α n-1∈ (V∪ T)*使得 α?G α 1,
α 1?G α 2,…,α n-1?G β 。
(2)当 n=0时,有 α =β 。即 α?G0 α 。
(3)α?G+ β,表示 α 在 G中经过至少 1步推导出 β ; β 在 G中经过至少 1步归约成 α 。
2009-7-26 124
2.2 形式定义
(4)α?G* β,表示 α 在 G中经过若干步推导出 β ; β 在 G中经过若干步归约成 α 。
分别用?,?+,?*,?n代替
G,?G+,?G*,?Gn 。
2009-7-26 125
2.2 形式定义
例 2-4 设 G=({A},{a},{A?a|aA},A)
A? aA 使用产生式 A?aA
aaA 使用产生式 A?aA
aaaA 使用产生式 A?aA
aaaaA 使用产生式 A?aA
…
a… aA 使用产生式 A?aA
a… aa 使用产生式 A?a?
2009-7-26 126
2.2 形式定义
A? aA 使用产生式 A?aA
aaA 使用产生式 A?aA
aaaA 使用产生式 A?aA
aaaaA 使用产生式 A?aA
…
a… aA 使用产生式 A?aA
a… aaA 使用产生式 A?aA
2009-7-26 127
2.2 形式定义
AAaaAAA? AAaaAaAA 使用产生式 A?aA
AaAaaAaAA 使用产生式 A?aA
AaAaaAaaA 使用产生式 A?a
aaAaaAaaA 使用产生式 A?a
aaAaaAaaa 使用产生式 A?a
aaaAaaAaaa 使用产生式 A?aA
aaaaaaAaaa 使用产生式 A?a
aaaaaaaaaa 使用产生式 A?a
2009-7-26 128
2.2 形式定义
例 2-5 设 G=({S,A,B},{0,1},
{S?A|AB,A?0|0A,B?1|11},S)
对于 n? 1,
A?n 0n 首先连续 n-1次使用产生式;
A?0A,最后使用产生式 A?0;
A?n 0nA 连续 n次使用产生式 A?0A;
B? 1 使用产生式 B?1;
B? 11 使用产生式 B?11。
2009-7-26 129
2.2 形式定义语 法 范 畴 A 代表的集合 L(A)={0,00,000,
0000,…… }={0n|n? 1};
语法范畴 B代表的集合 L(B)={1,11}
语法范畴 S代表的集合 L(S)=L(A)∪ L(A)L(B)
={0,00,000,0000,… }∪ {0,00,000,
0000,… }{1,11}
={0,00,000,0000,… }∪
∪ {01,001,0001,00001,… }∪
∪ {011,0011,00011,000011,… }
2009-7-26 130
2.2 形式定义例 2-6 设 G=({A},{0,1},{A?01,A?0A1},A),
A?n 0nA1n n? 0
0nA1n? 0n+1A1n+1 n? 0
0nA1n? 0n+11n+1 n? 0
0nA1n?i 0n+iA1n+i n? 0,i? 0
0nA1n?i 0n+i1n+I n? 0,i? 0
0nA1n?* 0mA1m n? 0,m? n
0nA1n?+ 0m1m n? 0,m? n+1
0nA1n?+ 0mA1m n? 0,m? n+1
0nA1n?+ 0m1m n? 0,m? n+1
2009-7-26 131
2.2 形式定义
几点结论
– 对任意的 x∈∑ +,我们要使语法范畴 D代表的集合为 {xn|n? 0},可用产生式组 {D?ε |xD}来实现。
– 对任意的 x,y∈∑ +,我们要使语法范畴 D代表的集合为 {xnyn|n? 1},可用产生式组
{D?xy|xDy}来实现。
– 对任意的 x,y∈∑ +,我们要使语法范畴 D代表的集合为 {xnyn|n? 0},可用产生式组
{D?ε |xDy}来实现。
2009-7-26 132
2.2 形式定义
语言 (language)
L(G)={w | w∈ T*且 S?* w}
句子 (sentence)
w∈ L(G),w称为 G产生的一个 句子。
句型 (sentential form)
G=(V,T,P,S),对于?α ∈ (V∪ T)*,如果 S
* α,则称 α 是 G产生的一个 句型。
2009-7-26 133
2.2 形式定义
句子 w是从 S开始,在 G中可以推导出来的终极符号行,它 不含 语法变量。
句型 α 是从 S开始,在 G中可以推导出来的符号行,它 可能含有 语法变量。
例 2-7 给定文法 G=({S,A,B,C,D},{a,
b,c,d,#},{S?ABCD|abc#,A?aaA,
AB?aabbB,BC?bbccC,cC?cccC,
CD?ccd#,CD?d#,CD?#d},S)
2009-7-26 134
2.2 形式定义
S? ABCD 使用产生式 S?ABCD
aaABCD 使用产生式 A?aaA
aaaaABCD 使用产生式 A?aaA
aaaaaabbBCD 使用产生式 AB?aabbB
aaaaaabbbbccCD 使用产生式 BC?bbccC
aaaaaabbbbccccCD 使用产生式 cC?cccC
aaaaaabbbbcccc#d 使用产生式 CD?#d
2009-7-26 135
2.2 形式定义
S? ABCD 使用产生式 S?ABCD
AbbccCD 使用产生式 BC?bbccC
aaAbbccCD 使用产生式 A?aaA
aaAbbccccd# 使用产生式 CD?ccd#
aaaaAbbccccd# 使用产生式 A?aaA
aaaaaaAbbccccd# 使用产生式 A?aaA
aaaaaaaaAbbccccd# 使用产生式 A?aaA
2009-7-26 136
2.2 形式定义
例 2-8 构造产生标识符的文法
G=({<标识符 >,<大写字母 >,<小写字母 >,<阿拉伯数字 >},{0,
1,…,9,A,B,C,…,Z,a,b,c,…,z},P,<标识符 >)
P={ <标识符 >?<大写字母 >|<小写字母 >,
<标识符 >?<标识符 ><大写字母 >|<标识符 ><小写字母 >|<标识符 ><
阿拉伯数字 >,
<大写字母 >?A|B|C|D|E|F|G|H|I|J|K|L|M|N|O,
<大写字母 >?P|Q|R|S|T|U|V|W|X|Y|Z,
<小写字母 >?a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z,
<阿拉伯数字 >?0|1|2|3|4|5|6|7|8|9 }
2009-7-26 137
2.2 形式定义
G′ =({<标识符 >,<头 >,<尾 >},{0,1,
2,…,9,A,B,C,…,Z,a,b,
c,…,z},P′,<标识符 >)
P′ ={<标识符 >?<头 ><尾 >,
<头 >?A|B|C|D|E|F|G|H|I|J|K|L|M|N
<头 >?O|P|Q|R|S|T|U|V|W|X|Y|Z,
<头 >?a|b|c|d|e|f|g|h|i|j|k|l|m|n
<头 >?o|p|q|r|s|t|u|v|w|x|y|z,
2009-7-26 138
2.2 形式定义
<尾 >?ε |0<尾 >|1<尾 >|2<尾 >|3<尾 >|4<尾 >|5<尾 >,
<尾 >? 6<尾 >|7<尾 >|8<尾 >|9<尾 >,
<尾 >?A<尾 >|B<尾 >|C<尾 >|D<尾 >|E<尾 >|F<尾 >,
<尾 >?G<尾 >|H<尾 >|I<尾 >|J<尾 >|K<尾 >,
<尾 >?L<尾 >|M<尾 >|N<尾 >|O<尾 >|P<尾 >|Q<尾 >,
<尾 >? R<尾 >|S<尾 >|T<尾 >|U<尾 >|V<尾 >,
<尾 >? W<尾 >|X<尾 >|Y<尾 >|Z<尾 >|a<尾 >|b<尾 >,
<尾 >?c<尾 >|d<尾 >|e<尾 >|f<尾 >|g<尾 >,
<尾 >?h<尾 >|i<尾 >|j<尾 >|k<尾 >|l<尾 >|m<尾 >,
<尾 >? n<尾 >|o<尾 >|p<尾 >|q<尾 >|r<尾 >,
<尾 >?s<尾 >|t<尾 >|u<尾 >|v<尾 >|w<尾 >|x<尾 >
<尾 >?y<尾 >|z<尾 > }
2009-7-26 139
2.2 形式定义
<标识符 >?<标识符 ><阿拉伯数字 >
<标识符 >3
<标识符 ><阿拉伯数字 >3
<标识符 >23
<标识符 ><小写字母 >23
<标识符 >n23
<标识符 ><阿拉伯数字 >n23
<标识符 >8n23
<标识符 ><小写字母 >8n23
<标识符 >d8n23
<小写字母 >d8n23
id8n23
2009-7-26 140
2.2 形式定义标识符 >?<头 ><尾 >
i<尾 >
id<尾 >
id8<尾 >
id8n<尾 >
id8n2<尾 >
id823<尾 >
id8n23
2009-7-26 141
2.2 形式定义
使用符号使文法更简洁
G′′=({<标识符 >},{b,a,d},{<标识符 >?b|a|<
标识符 >b|<标识符 >a|<标识符 >d},<标识符 >)
G′′′=({L},{b,a,d},{L?b|a|Lb|La|Ld},L)
G′′′′=({L,H,T},{ b,a,d },{L?HT,
H?b|a,T?ε |bT|aT|dT},L)
2009-7-26 142
2.3 文法的构造
例 2-9 构造文法 G,使 L(G)={0,1,00,11}
– 将文法的开始符号定义为这 4个句子。
G1=({S},{0,1},{S?0,S?1,S?00,S?11},S)
– 先用变量 A表示 0,用变量 B表示 1。
G2=({S,A,B},{0,1},{S?A,S?B,S?AA,
S?BB,A?0,B?1},S)
– 基于 G2,考虑,规范性,问题。
G3=({S,A,B},{0,1},{S?0,S?1,S?0A,
S?1B,A?0,B?1},S)
2009-7-26 143
2.3 文法的构造
– 可以在 V,T中增加一些元素,以获得,不同的,文法。
G4=({S,A,B,C},{0,1,2},{S?A,S?B,
S?AA,S?BB,A?0,B?1},S)
G5=({S,A,B,C},{0,1,2},{S?A,S?B,
S?AA,S?BB,A?0,B?1,CACS?21,
C?11,C?2},S)
L(G1)= L(G2)= L(G3)= L(G4)= L(G5)
2009-7-26 144
2.3 文法的构造
等价 (equivalence)
– 设有两个文法 G1和 G2,如果 L(G1)= L(G2),则称 G1与 G2等价。
约定
– 对一个文法,只列出该文法的所有产生式,且所列第一个产生式的左部是该文法的开始符号。
2009-7-26 145
2.3 文法的构造
G1,S?0|1|00|11
G2,S?A|B|AA|BB,A?0,B?1
G3,S?0|1|0A|1B,A?0,B?1
G4,S?A|B|AA|BB,A?0,B?1
G5,S?A|B|BB,A?0,B?1,CACS?21,
C?11,C?2
2009-7-26 146
2.3 文法的构造
例 2-10
L={0n|n? 1}
G6,S?0|0S
L={0n|n? 0}
G7,S?ε |0S
L={02n13n|n? 0}
G8,S?ε |00S111
2009-7-26 147
2.3 文法的构造
例 2-11 构造文法 G9,使 L(G9)={w|w∈ {a,b,…,
z}+}。
G9,S?A|AS
A?a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
用 S?A|AS生成 An。
不可以用 A?a|b|c|…|z 表示。
A?a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
不可以用 A?a8表示 A?aaaaaaaa。
不能用 A?an 表示 A可以产生任意多个 a。
2009-7-26 148
2.3 文法的构造
例 2-12 构造文法 G10,使
L(G10)={wwT|w∈ {0,1,2,3}+}。
文法
S?HE
H?0|1|2|3|0H|1H|2H|3H
E?0|1|2|3|E0|E1|E2|E3
难以生成 L(G10)。
2009-7-26 149
2.3 文法的构造
{wwT|w∈ {0,1,2,3}+}的句子的特点设 w=a1a2… an,从而有 wT= an… a2 a1,故 w
wT= a1a2… anan… a2 a1
满足 f(w wT,i)=f(w wT,|w wT|-i+1)。
递归地定义 L
– ⑴ 对?a∈ {0,1,2,3},aa∈ L;
– ⑵ 如果 x∈ L,则对?a∈ {0,1,2,3},axa∈ L;
– ⑶ L中不含不满足 (1),(2)任何其他的串。
2009-7-26 150
2.3 文法的构造根据递归定义中的第一条,有如下产生式组:
S?00 | 11 | 22 | 33
再根据递归定义第二条,又可得到如下产生式组:
S?0S0 | 1S1 | 2S2 | 3S3
从而,
G10,S?00 | 11 | 22 | 33 | 0S0 | 1S1 | 2S2 | 3S3
2009-7-26 151
2.3 文法的构造
例 2-13 构造文法 G12,使 L(G12)={w|w是我们习惯的十进制有理数 }。
G12,S?R | +R | -R
R?N | B
B?N.D
N?0 | AM
D?0 | MA
A?1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
M?ε | 0M | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M
2009-7-26 152
2.3 文法的构造
例 2-14 构造产生算术表达式的文法:
⑴ 基础:常数是算术表达式,变量是算术表达式;
⑵ 归纳:如果 E1,E2是表达式,则 +E1,-E1、
E1+E2,E1-E2,E1*E2,E1/E2,E1**E2,Fun(E1)
是算术表达式 。 其中 Fun为函数名 。
⑶ 只有满足 (1)和 (2)的才是算术表达式。
G13,E?id|c|+E|-E|E+E|E-E|E*E|E/E|E**E|Fun(E)
2009-7-26 153
2.3 文法的构造
例 2-15 构造产生语言 {anbncn|n? 1}的文法。
文法 G=({S1},{a,b},{S1?ab | aS1b},S1)
产生的语言 {anbn | n? 1}形式上看起来与语言
{anbncn| n? 1}比较接近 。
G=({S2},{c},{S2?c | cS2},S2)产生的语言是 {cn|n? 1}。
{anbncn | n? 1}≠{a nbn | n? 1}{cn | n? 1}
2009-7-26 154
2.3 文法的构造文法
S?S1S2
S1?ab | aS1b
S2?c | cS2
不能产生语言
{anbncn | n? 1}
而是产生语言
{anbn | n?1}{c n | n?1}
2009-7-26 155
2.3 文法的构造文法
G,S?abc | aSbc
产生的语言为:
{an(bc)n | n? 1}
焦点:交换 b和 c的位置。
2009-7-26 156
2.3 文法的构造
G14,S?aBC | aSBC,
CB?BC
aB?ab
bB?bb
bC?bc
cC?cc
G14′,S?abc|aSBc,
bB?bb
cB?Bc
2009-7-26 157
文法的乔姆斯基体系
文法 G=(V,T,P,S)
G叫做 0型文法 (type 0 grammar),也叫做短语结构文法 (phrase structure grammar,
PSG)。
L(G)叫做 0型语言 。也可以叫做 短语结构语言 (PSL)、递归可枚举集 (recursively
enumerable,r.e,)。
2009-7-26 158
文法的乔姆斯基体系
G是 0型文法。
如果对于?α?β ∈ P,均有 |β |? |α |成立,则称 G为 1型文法 (type 1 grammar),
或 上下文有关文法 (context sensitive
grammar,CSG)。
L(G)叫做 1型语言 (type 1 language)或者上下文有关语言 (context sensitive
language,CSL)。
2009-7-26 159
文法的乔姆斯基体系
G是 1型文法
如果对于?α?β ∈ P,均有 |β |? |α |,并且
α ∈ V成立,则称 G为 2型文法 (type 2
grammar),或 上下文无关文法 (context free
grammar,CFG)。
L(G)叫做 2型语言 (type 2 language)或者 上下文无关语言 (context free language,CFL)。
2009-7-26 160
文法的乔姆斯基体系
G是 2型文法
如果对于?α?β ∈ P,α?β 均具有形式
A?w
A?wB
其中 A,B∈ V,w∈ T+。 则称 G为 3型文法
(type 3 grammar),也可称为 正则文法
(regular grammar,RG)或者正规文法 。
L(G)叫做 3型语言 (type 3 language),也可称为 正 则 语 言 或者 正 规 语 言 (regular
language,RL)。
2009-7-26 161
文法的乔姆斯基体系
⑴ 如果一个文法 G是 RG,则它也是 CFG、
CSG和短语结构文法 。 反之不一定成立 。
⑵ 如果一个文法 G是 CFG,则它也是 CSG和短语结构文法 。 反之不一定成立 。
⑶ 如果一个文法 G是 CSG,则它也是短语结构文法 。 反之不一定成立 。
相应地:
⑷ RL也是 CFL,CSL和短语结构语言 。 反之不一定成立 。
2009-7-26 162
文法的乔姆斯基体系
⑸ CFL也是 CSL和短语结构语言 。 反之不一定成立 。
⑹ CSL也是短语结构语言 。 反之不一定成立
⑺ 当文法 G是 CFG时,L(G)却可以是 RL。
⑻ 当文法 G是 CSG时,L(G)可以是 RL,CSL。
⑼ 当文法 G是短语结构文法时,L(G)可以是
RL,CSL和 CSL。
2009-7-26 163
文法的乔姆斯基体系定理 2-1 L是 RL的充要条件是存在一个文法,
该文法产生语言 L,并且它的产生式要么是形如,A?a的产生式,要么是形如 A?aB的产生式。其中 A,B为语法变量,a为终极符号。
证明,
– 充分性:设有 G′,L(G′ )=L,且 G′ 的产生式的形式满足定理要求。这种文法就是 RG。所以,
G′ 产生的语言就是 RL,故 L是 RL。
2009-7-26 164
文法的乔姆斯基体系
必要性构造:用 产生式组:
A?a1A1
A1?a2A2
…
An-1?an
代替产生式
A? a1a2… an
2009-7-26 165
文法的乔姆斯基体系
用 产生式组
A?a1A1
A1?a2A2
…
An-1?anB
代替产生式
A? a1a2… an B
2009-7-26 166
文法的乔姆斯基体系
证明 L(G′ )=L(G) 。
施归纳于推导的步数,证明一个更一般的结论:对于?A∈ V,A?G+ x?A?
G′ + x。因为 S∈ V,所以结论自然对 S成立。
2009-7-26 167
文法的乔姆斯基体系
几点注意事项
⑴ 我们是按照 RG的一般定义来构造一个与之等价的文法的,这与读者以前熟悉的根据一个具体的对象构造另一个对象是不同的 。 在这里,可以使用的是非常一般的条件 ——一个一般模型 。 这也是这类问题的证明所要求的 。 而且在本书的后面,将会有更多这样的情况 。
2009-7-26 168
文法的乔姆斯基体系
⑵ 为了证明一个特殊的结论,可以通过证明一个更为一般的结论来完成 。 这从表面上好像是增加了我们要证明的内容,但实际上它会使我们能够更好地使用归纳假设,
以便顺利地获得我们所需要的结论 。
2009-7-26 169
文法的乔姆斯基体系
⑶ 施归纳于推导的步数是证明本书中不少问题的较为有效的途径 。 有时我们还会对字符串的长度施归纳 。
本证明的主要部分含两个方面,首先是构造,
然后对构造的正确性进行证明 。 这种等价性证明的思路是非常重要的 。
2009-7-26 170
文法的乔姆斯基体系
线性文法 (liner grammar)
– 设 G=(V,T,P,S),如果对于?α?β ∈ P,
α?β 均具有如下形式:
– A?w
– A?wBx
– 其中 A,B∈ V,w,x∈ T*,则称 G为 线性文法。
线性语言 (liner language)
– L(G)叫做 线性语言
2009-7-26 171
文法的乔姆斯基体系
右线性文法 (right liner grammar)
– 设 G=(V,T,P,S),如果对于?α?β ∈ P,
α?β 均具有如下形式:
– A?w
– A?wB
– 其中 A,B∈ V,w,x∈ T*,则称 G为 线性文法。
右线性语言 (right liner language)
– L(G)叫做右 线性语言。
2009-7-26 172
文法的乔姆斯基体系
左线性文法 (left liner grammar)
– 设 G=(V,T,P,S),如果对于?α?β ∈ P,
α?β 均具有如下形式:
– A?w
– A?Bw
– 其中 A,B∈ V,w,x∈ T*,则称 G为 线性文法。
左线性语言 (left liner language)
– L(G)叫做右 线性语言。
2009-7-26 173
文法的乔姆斯基体系定理 2-2 L是一个左线性语言的充要条件是存在文法 G,G中的产生式要么是形如,A?a
的产生式,要么是形如 A?Ba的产生式,使得 L(G)=L。其中 A,B为语法变量,a为终极符号。
2009-7-26 174
文法的乔姆斯基体系定理 2-3 左线性文法与右线性文法等价。
按照定理 2-1的证明经验,要想证明本定理,
需要完成如下工作:
– 对任意右线性文法 G,我们能够构造出对应的左线性文法 G′,使得 L(G′ )=L(G);
– 对任意左线性文法 G,我们能够构造出对应的右线性文法 G′,使得 L(G′ )=L(G)。
2009-7-26 175
文法的乔姆斯基体系
例 2-17 语言 {0123456}的左线性文法和右线性文法的构造。
右线性文法
Gr,Sr?0Ar
Ar?1Br
Br?2Cr
Cr?3Dr
Dr?4Er
Er?5Fr
Fr?6
2009-7-26 176
文法的乔姆斯基体系
0123456在文法 Gr中的推导
Sr?0Ar 使用产生式 Sr?0Ar
01Br 使用产生式 Ar?1Br
012Cr 使用产生式 Br?2Cr
0123Dr 使用产生式 Cr?3Dr
01234Er 使用产生式 Dr?4Er
012345Fr 使用产生式 Er?5Fr
0123456 使用产生式 Fr?6
2009-7-26 177
文法的乔姆斯基体系
左线性文法
Gl,Sl?Al6
Al?Bl5
Bl?Cl4
Cl?Dl3
Dl?El2
El?Fl1
Fl?0
2009-7-26 178
文法的乔姆斯基体系
2009-7-26 179
文法的乔姆斯基体系
0123456在文法 Gl中的推导
Sl?Al6 使用产生式 Sl?Al6
Bl56 使用产生式 Al?Bl5
Cl456 使用产生式 Bl?Cl4
Dl3456 使用产生式 Cl?Dl3
El23456 使用产生式 Dl?El2
Fl1234456 使用产生式 El?Fl1
0123456 使用产生式 Fl?0
2009-7-26 180
文法的乔姆斯基体系
0123456被归约成文法 Gl的开始符号 S
0123456
Fl1234456 使用产生式 Fl?0
El23456 使用产生式 El?Fl1
Dl3456 使用产生式 Dl?El2
Cl456 使用产生式 Cl?Dl3
Bl56 使用产生式 Bl?Cl4
Al6 使用产生式 Al?Bl5
Sl 使用产生式 Sl?Al6
2009-7-26 181
文法的乔姆斯基体系
2009-7-26 182
文法的乔姆斯基体系定理 2-4 左线性文法的产生式与右线性文法的产生式混用所得到的文法不是 RG。
证明:设有文法
G15,S?0A
A?S1|1
不难看出,L(G15)={0n1n|n? 1}。我们构造不出
RG G,使得 L(G)= L(G15)={0n1n|n? 1}。因为
L(G15)={0n1n|n? 1}不是 RL。所以,G15不是 RG。
有关该语言不是 RL的证明我们将留到研究 RL的性质时去完成。
2009-7-26 183
2.5 空语句
形如 A?ε 的产生式叫做空产生式,也可叫做 ε 产生式。
在 RG,CFG,CSG中,都不能含有空产生式。所以,任何 CSL中都不含有空语句 ε 。
从而 CFL和 RL中都不能含空语句 ε 。
空语句 ε 在一个语言中的存在并不影响该语言的有穷描述的存在性,甚至除了为生成空语句 ε 外,空产生式可以不被用于语言中其他任何句子的推导中。
2009-7-26 184
2.5 空语句
允许 CSL,CFL,RL包含空语句 ε 后,还会给我们进行问题的处理提供一些方便。
允许在 RG,CFG,CSG中含有空产生式
允许 CSL,CFL,RL包含空语句 ε 。
2009-7-26 185
2.5 空语句定理 2-5 设 G=(V,T,P,S)为一文法,则存在与 G同类型的文法 G′ =(V′,T,P′,S′ ),使得
L(G)=L(G′ ),但 G′ 的开始符号 S′ 不出现在 G′
的任何产生式的右部。
证明:
构造当文法 G=(V,T,P,S)的开始符号 S不出现在 P中的任何产生式的右部时,G就是所求
G′=(V∪ {S′},T,P′,S′)
P′ =P∪ {S′?α |S?α ∈ P}
2009-7-26 186
2.5 空语句
证明 L(G)?L(G′ )
对任意的 x∈ L(G′ ),由文法产生的语言的定义知,在 G′ 中存在如下推导:
S′?α 使用产生式 S′?α
*x 使用 P′ 中的除 S′?α 以外的其他产生式。
在推导 α?*x中使用的产生式都是 P中的产生式。因此,推导 α?*x在 G中仍然成立。
2009-7-26 187
2.5 空语句由 P′ 的定义知,必有 S?α ∈ P
所以,
S?α 使用 P中的产生式 S?α
*x 使用 P中的产生式故,
L(G′ )?L(G)
2009-7-26 188
2.5 空语句设 G中存在如下推导:
S?α 使用 P中的产生式 S?α
*x 使用 P中的产生式由 P′ =P∪ {S′?α |S?α ∈ P },知道 G′ 中,
S′?α 使用产生式 S′?α
*x 使用 P′ 所包含的 P中的其他产生式。
故,L(G)?L(G′ )。
2009-7-26 189
2.5 空语句设 G=(V,T,P,S)是一个文法,如果 S不出现在 G
的任何产生式的右部,则:
⑴ 如果 G是 CSG,则仍然称 G=(V,T,P∪ {S?ε },
S)为 CSG; G产生的语言仍然称为 CSL。
⑵ 如果 G是 CFG,则仍然称 G=(V,T,P∪ {S?ε },
S)为 CFG; G产生的语言仍然称为 CFL。
⑶ 如果 G是 RG,则仍然称 G=(V,T,P∪ {S?ε },
S)为 RG。 G产生的语言仍然称为 RL。
2009-7-26 190
2.5 空语句定理 2-6下列命题成立:
⑴ 如果 L是 CSL,则 L∪ {ε }仍然是 CSL。
⑵ 如果 L是 CFL,则 L∪ {ε }仍然是 CFL。
⑶ 如果 L是 RL,则 L∪ {ε }仍然是 RL。
2009-7-26 191
2.5 空语句证明:对第 1个命题:设 L是 CSL,则存在一个 CSG G=(V,T,P,S),使得 L(G)=L。
由定理 2-5-1,我们不妨假设 S不出现在 G的任何产生式的右部 。
取:
G′ =(V,T,P∪ {S?ε },S)
由于 S不出现在 G的任何产生式的右部,所以,
S?ε 不可能出现在任何长度不为 0的句子的推导中 。
2009-7-26 192
2.5 空语句易证:
L(G′ )=L(G)∪ {ε }。
由于 G′ 是 CSG,所以,L(G)∪ {ε }是 CSL。
同理可证第 2和第 3个命题。
2009-7-26 193
2.5 空语句定理 2-7 下列命题成立
⑴ 如果 L是 CSL,则 L-{ε }仍然是 CSL。
⑵ 如果 L是 CFL,则 L-{ε }仍然是 CFL。
⑶ 如果 L是 RL,则 L-{ε }仍然是 RL。
2009-7-26 194
2.5 空语句证明:对第 1个命题:设 L是 CSL,则存在一个 CSG G=(V,T,P,S),使得 L(G)=L。
如果 ε?L,则 L-{ε }=L,所以,L-{ε }是
CSL。
如果 ε ∈ L,由定理 2-5-1,我们不妨假设 S不出现在 G的任何产生式的右部 。 取:
G′ =(V,T,P-{S?ε },S)
2009-7-26 195
2.5 空语句由于 S不出现在 G的任何产生式的右部,所以,
如果 L(G)中存在长度非 0的句子,S?ε 不可能出现在它们的推导中 。 也就是说,将
S?ε 从 G中去掉后,不会影响 L(G)中任何长度非 0的句子的推导 。 容易证明:
L(G′ )=L(G)-{ε }
由于 G′ 是 CSG,所以,L(G)-{ε }是 CSL。
同理可证其他两个命题。
2009-7-26 196
2.5 空语句
对于任意文法 G=(V,T,P,S),对于 G中的其他变量 A,出现形如 A?ε 的产生式是不会改变文法产生的语言的类型的,而且这样一来,对我们进行文法的构造等工作还提供了很多方便。所以,我们约定:对于 G中的任何变量 A,在需要的时候,可以出现形如 A?ε 的产生式。
2009-7-26 197
2.6 小结本章讨论了语言的文法描述。首先介绍文法的基本定义和推导、归约、文法定义的语言、句子、句型、文法的等价等重要概念。讨论了如何根据语言的特点、通过用语法变量去表示适当的集合(语法范畴)的方法进行文法构造,并按照乔姆斯基体系,将文法划分成 PSG,CSG,CFG、
RG等 4类。在这些文法中,线性文法是一类重要的文法。
2009-7-26 198
2.6 小结
⑴ 文法 G=(V,T,P,S)。 任意 A∈ V表示集合 L(A)={w | w∈ T*且 A?* w}。
⑵ 推导与归约 。 文法中的推导是根据文法的产生式进行的 。 如果 α?β ∈ P,γ,
δ ∈ (V∪ T)*,则称 γ α δ 在 G中直接推导出 γ β δ,γ α δ?G γ β δ ;也称
γ β δ 在文法 G中直接归约成 γ α δ 。
2009-7-26 199
2.6 小结
⑶ 语言,句子和句型 。 文法 G产生的语言
L(G)={w | w∈ T*且 S?* w},w∈ L(G)为句子 。 一般地,由开始符号推出来的任意符号行叫做 G的句型 。
⑷ 一个语言可以被多个文法产生,产生相同语言的文法被称是等价的 。
2009-7-26 200
2.6 小结
⑸ 右线性文法的产生式都可以是形如 A?a和
A?aB的产生式。左线性文法的产生式都可以是形如 A?a和 A?Ba的产生式。左线性文法与右线性文法是等价的。然而,左线性文法的产生式与右线性文法的产生式混用所得到的文法不是正则文法。
2009-7-26 201
第 3章 有穷状态自动机
主要内容
确定的有穷状态自动机 (DFA)
– 作为对实际问题的抽象,直观物理模型,形式定义,DFA接受的句子,语言,状态转移图 。
不确定的有穷状态自动机 (NFA)
– 定义;
– NFA与 DFA的等价性;
2009-7-26 202
第 3章 有穷状态自动机
带空移动的有穷状态自动机 (ε-NFA)
– 定义 。
– ε-NFA与 DFA的等价性 。
FA是正则语言的识别器
– 正则文法 (RG)与 FA的等价性 。
– 相互转换方法 。
– 带输出的有穷状态自动机 。
– 双向有穷状态自动机 。
2009-7-26 203
第 3章 有穷状态自动机
重点,DFA的概念,DFA,NFA,ε-NFA,
RG之间的等价转换思路与方法 。
难点:对 DFA概念的理解,DFA,RG的构造方法,RG与 FA的等价性证明 。
2009-7-26 204
3.1 语言的识别
推导和归约中的回溯问题将对系统的效率产生极大的影响
S?aA|aB
A?aA|c
B?aB|d
分析句子 aaac的过程中可能需要回溯 。
2009-7-26 205
3.1 语言的识别
系统识别语言 {anc|n≥1}∪ {and|n≥1}的字符串过程中状态的变化图示如下:
2009-7-26 206
3.1 语言的识别
识别系统 (模型 )
⑴ 系统具有有穷个状态,不同的状态代表不同的意义。按照实际的需要,系统可以在不同的状态下完成规定的任务。
⑵ 我们可以将输入字符串中出现的字符汇集在一起构成一个字母表。系统处理的所有字符串都是这个字母表上的字符串。
2009-7-26 207
3.1 语言的识别
⑶ 系统在任何一个状态 (当前状态 )下,从输入字符串中读入一个字符,根据当前状态和读入的这个字符转到新的状态。当前状态和新的状态可以是同一个状态,也可以是不同的状态;当系统从输入字符串中读入一个字符后,它下一次再读时,会读入下一个字符。这就是说,相当于系统维持有一个读写指针,该指针在系统读入一个字符后指向输入串的下一个字符。
2009-7-26 208
3.1 语言的识别
⑷ 系统中有一个状态,它是系统的开始状态,系统在这个状态下开始进行某个给定句子的处理。
⑸ 系统中还有一些状态表示它到目前为止所读入的字符构成的字符串是语言的一个句子,把所有将系统从开始状态引导到这种状态的字符串放在一起构成一个语言,
该语言就是系统所能识别的语言。
2009-7-26 209
3.1 语言的识别
相应的物理模型一个右端无穷的输入带。
一个有穷状态控制器 (finite state control,FSC) 。
一个读头。
系统的每一个动作由三个节拍构成:读入读头正注视的字符;根据当前状态和读入的字符改变有穷控制器的状态;将读头向右移动一格。
2009-7-26 210
3.1 语言的识别
有穷状态自动机的物理模型
2009-7-26 211
3.2有穷状态自动机
有穷状态自动机 (finite automaton,FA)
M=(Q,∑,δ,q0,F)
Q——状态的非空有穷集合 。q∈ Q,q称为
M的一个 状态 (state)。
∑——输入字母表 (Input alphabet)。输入字符串都是 ∑上的字符串。
q0——q0∈ Q,是 M的 开始状态 (initial state),
也可叫做初始状态或者启动状态 。
2009-7-26 212
3.2有穷状态自动机
δ——状态 转移函数 (transition function),
有时候又叫做状态转换函数或者移动函数。
δ,Q× ∑?Q,对?(q,a)∈ Q× ∑,δ(q,
a)=p表示,M在状态 q读入字符 a,将状态变成 p,并将读头向右移动一个带方格而指向输入字符串的下一个字符。
F——F?Q,是 M的 终止状态 (final state)集合。q∈ F,q称为 M的 终止状态,又称为接受状态 (accept state)。
2009-7-26 213
3.2有穷状态自动机
例 3-1 下面是一个有穷状态自动机
M1=({q0,q1,q2},{0},δ1,q0,{q2})
其中,δ1(q0,0)= q1,δ1(q1,0)= q2,δ1(q2,0)= q1
用表 3-1表示 δ1。
状态说明 状态 输入字符
0
开始状态 q0 q1
q1 q2
终止状态 q2 q1
2009-7-26 214
3.2有穷状态自动机
M2=({q0,q1,q2,q3},{0,1,2},δ 2,q0,{q2})
δ 2(q0,0)= q1,δ 2(q1,0)= q2
δ 2(q2,0)= q1,δ 2(q3,0)= q3
δ 2(q0,1)= q3,δ 2(q1,1)= q3
δ 2(q2,1)= q3,δ 2(q3,1)= q3
δ 2(q0,2)= q3,δ 2(q1,2)= q3
δ 2(q2,2)= q3,δ 2(q3,2)= q3
2009-7-26 215
3.2有穷状态自动机状态说明 状态 输入字符
0 1 2
开始状态 q0 q1 q3 q3
q1 q2 q3 q3
终止状态 q2 q1 q3 q3
q3 q3 q3 q3
表 3-2 δ 2转换函数
2009-7-26 216
3.2有穷状态自动机
将 δ 扩充为
QQ *:
对任意的 q∈ Q,w∈∑ *,a∈∑,定义
)),,(?(),(?)2(
),(?)1(
awqwaq
qq
2009-7-26 217
3.2有穷状态自动机
),(
)),,(?(
),(?),(?
aq
aq
aqaq
两值相同,不用区分这两个符号。
2009-7-26 218
3.2有穷状态自动机
确定的有穷状态自动机
– 由于对于任意的 q∈ Q,a∈∑,δ (q,a)均有确定的值,所以,将这种 FA称为 确定的有穷状态自动机 (deterministic finite automaton,
DFA)
2009-7-26 219
3.2有穷状态自动机
M接受 (识别 )的语言对于?x∈∑ *如果 δ (q,w)∈ F,则称 x被 M接受,
如果 δ (q,w)?F,则称 M不接受 x。
L(M)={x| x∈∑ *且 δ (q,w)∈ F}
称为由 M接受 (识别 )的语言
L(M1)= L(M2)={02n|n? 1}
如果 L(M1)=L(M2),则称 M1与 M2等价。
2009-7-26 220
3.2有穷状态自动机
例 3-2 构造一个 DFA,它接受的语言为
{x000y|x,y∈ {0,1}*}
q0——M的启动状态;
q1——M读到了一个 0,这个 0可能是子串,000”的第 1个 0;
q2——M在 q1后紧接着又读到了一个 0,这个 0可能是子串,000”的第 2个 0;
q3——M在 q2后紧接着又读到了一个 0,发现输入字符串含有子串,000”;因此,这个状态应该是终止状态 。
2009-7-26 221
3.2有穷状态自动机
δ (q0,1)= q0——M在 q0读到了一个 1,它需要继续在 q0,等待,可能是子串,000”的第 1
个 0的输入字符 0;
δ (q1,1)= q0——M在刚刚读到了一个 0后,读到了一个 1,表明在读入这个 1之前所读入的 0并不是子串,000”的第 1个 0,因此,M
需要重新回到状态 q0,以寻找子串,000”的第 1个 0;
2009-7-26 222
3.2有穷状态自动机
δ (q2,1)= q0——M在刚刚发现了 00后,读到了一个 1,表明在读入这个 1之前所读入的 00并不是子串,000”的前两个 0,因此,M需要重新回到状态 q0,以寻找子串,000”的第 1个 0;
δ (q3,0)= q3——M找到了子串,000”,只用读入该串的剩余部分 。
δ (q3,1)= q3——M找到了子串,000”,只用读入该串的剩余部分 。
2009-7-26 223
3.2有穷状态自动机
M=({q0,q1,q2,q3},{0,1},{ (q0,0)= q1,
δ (q1,0)= q2,δ (q2,0)= q3,δ (q0,1)= q0,
δ (q1,1)= q0,δ (q2,1)= q0,δ (q3,0)= q3,
δ (q3,1)= q3},q0,{q3})
状态说明 状态 输入字符
0 1
开始状态 q0 q1 q0
q1 q2 q0
q2 q3 q0
终止状态 q3 q3 q3
2009-7-26 224
3.2有穷状态自动机
一种更为直观的表示
2009-7-26 225
3.2有穷状态自动机
状态转移图 (transition diagram)
⑴ q∈ Q? q是该有向图中的一个顶点;
⑵ δ (q,a)=p? 图中有一条从顶点 q到顶点 p的标记为 a的弧;
⑶ q∈ F? 标记为 q的顶点被用双层圈标出;
⑷ 用标有 S的箭头指出 M的开始状态 。
状态转移图又可以叫做 状态转换图。
2009-7-26 226
3.2有穷状态自动机
例 3-3构造一个 DFA,它接受的语言为
{x000|x∈ {0,1}*}。
– 状态 q0读到的 0可能是输入字符串的最后三个 0
的第 1个 0;
– 在状态 q1紧接着读到的 0可能是输入字符串的最后三个 0的第 2个 0;
– 在状态 q2紧接着读到的 0可能是输入字符串的最后三个 0的第 3个 0;
2009-7-26 227
3.2有穷状态自动机
– 在状态 q3紧接着读到的 0也可能是输入字符串的最后三个 0的第 3个 0;
– 如果在状态 q1,q2,q3读到的是 1,则要重新检查输入串是否以三个 0结尾。
2009-7-26 228
3.2有穷状态自动机
几点值得注意
⑴ 定义 FA时,常常只给出 FA相应的状态转移图就可以了。
⑵ 对于 DFA来说,并行的弧按其上的标记字符的个数计算,对于每个顶点来说,它的出度恰好等于输入字母表中所含的字符的个数。
2009-7-26 229
3.2有穷状态自动机
⑶ 不难看出,字符串 x被 FA M接受的充分必要条件是,在 M的状态转移图中存在一条从开始状态到某一个终止状态的有向路,
该有向路上从第 1条边到最后一条边的标记依次并置而构成的字符串 x。简称此路的标记为 x。
⑷ 一个 FA可以有多于 1个的终止状态。
2009-7-26 230
3.2有穷状态自动机接受语言 {x000|x∈ {0,1}*}∪ {x001|x∈ {0,1}*}的 FA
2009-7-26 231
3.2有穷状态自动机
即时描述 (instantaneous description,
ID )
– x,y∈∑ *,δ (q0,x)=q,xqy称为 M的一个 即时描述,表示 xy是 M正在处理的一个字符串,x
引导 M从 q0启动并到达状态 q,M当前正注视着
y的首字符。
– 如果 xqay是 M的一个即时描述,且 δ (q,a)=p,
则 xqay ├ M xapy。
2009-7-26 232
3.2有穷状态自动机
α ├ Mn β,表示 M从即时描述 α 经过 n次移动到达即时描述 β 。
M存在即时描述 α 1,α 2,……,α n-1,使得
α ├ M α 1,α 1├ M α 2,…,α n-1├ Mβ
当 n=0时,有 α =β 。即 α ├ M 0 α 。
α├M + β:表示 M从即时描述 α经过至少 1次移动到达即时描述 β。
α ├ M * β,表示 M从即时描述 α 经过若干步移动到达即时描述 β 。
2009-7-26 233
3.2有穷状态自动机
当意义清楚时,我们将符号 ├ M,├ Mn、
├ M*,├ M+中的 M省去,分别用 ├,├ n、
├ *,├ +表示。
2009-7-26 234
3.2有穷状态自动机对下图所示的 DFA有如下的 ID转换:
2009-7-26 235
3.2有穷状态自动机
q01010010001├ 1q0010010001
├ 10q110010001
├ 101q00010001
├ 1010q1010001
├ 10100q210001
├ 101001q00001
├ 1010010q1001
├ 10100100q201
2009-7-26 236
3.2有穷状态自动机
├ 101001000q31
├ 1010010001q0
即 q01010010001├ 101010010001q0
q01010010001├ +1010010001q0
q01010010001├ *1010010001q0
2009-7-26 237
3.2有穷状态自动机
对于 x∈∑ *,
q0x1├ + x1q0
q0x10├ + x10q1
q0x100├ + x100q2
q0x000├ + x000q3
2009-7-26 238
3.2有穷状态自动机能引导 FA从开始状态到达 q的字符串的集合为:
set(q)={x | x∈∑ *,δ (q0,x)=q}
对图 3-3所给的 DFA中的所有 q,求 set(q)。
2009-7-26 239
set(q0)={x | x∈∑ *,x=ε 或者 x以 1结尾 }
set(q1)={x | x∈∑ *,x=0或者 x以 10结尾 }
set(q2)={x | x∈∑ *,x=00或者 x以 100结尾 }
set(q3)={x | x∈∑ *,x以 000结尾 }
set(q4)={x | x∈∑ *,x以 001结尾 }
这 5个集合是两两互不相交 。
2009-7-26 240
3.2有穷状态自动机
对于任意一个 FA M=(Q,∑,δ,q0,F)
我们可以按照如下方式定义关系 RM:
对?x,y∈∑ *,xRMyq∈ Q,使得
x∈ set(q)和 y∈ set(q)同时成立 。
按照这个定义所得到的关系实际上是 ∑ *上的一个等价关系。利用这个关系,可以将
∑ *划分成不多于 |Q|个等价类。
2009-7-26 241
3.2有穷状态自动机
例 3-4 构造一个 DFA,它接受的语言为 {0n1m2k|n,m,k? 1}。
q0——M的启动状态;
q1——M读到至少一个 0,并等待读更多的 0;
q2——M读到至少一个 0后,读到了至少一个
1,并等待读更多的 1;
q3——M读到至少一个 0后跟至少一个 1后,
并且接着读到了至少一个 2。
2009-7-26 242
3.2有穷状态自动机
先设计“主体框架”
再补充细节
2009-7-26 243
3.2有穷状态自动机
⑴ 当 FA一旦进入状态 qt,它就无法离开此状态。所以,qt相当于一个陷阱状态 (trap)。
一般地,我们将陷阱状态用作在其他状态下发现输入串不可能是该 FA所识别的语言的句子时进入的状态。在此状态下,FA读完输入串中剩余的字符。
2009-7-26 244
3.2有穷状态自动机
⑵ 在构造一个识别给定语言的 FA时,用画图的方式比较方便、直观。我们可以先根据语言的主要特征画出该 FA的,主体框架,,然后再去考虑画出一些细节要求的内容。
2009-7-26 245
3.2有穷状态自动机
⑶ FA的状态具有一定的记忆功能:不同的状态对应于不同的情况,由于 FA只有有穷个状态,所以,在识别一个语言的过程中,
如果有无穷种情况需要记忆,我们肯定是无法构造出相应的 FA的。
2009-7-26 246
3.2有穷状态自动机
例 3-5构造一个 DFA,它接受的语言为 {x|x∈ {0,1}*,且当把 x看成二进制数时,x模 3与 0同余 }。
q0——对应除以 3余数为 0的 x组成的等价类;
q1——对应除以 3余数为 1的 x组成的等价类;
q2——对应除以 3余数为 2的 x组成的等价类;
qs——M的开始状态 。
2009-7-26 247
3.2有穷状态自动机
qs——在此状态下读入 0时,有 x=0,所以应该进入状态 q0;读入 1时,有 x=1,所以应该进入状态 q1。即,δ (qs,0)= q0; δ (qs,
1)= q1 。
2009-7-26 248
3.2有穷状态自动机
q0——能引导 M到达此状态的 x除以 3余 0,
所以有,x=3*n+0。
读入 0时,引导 M到达下一个状态的字符串为 x0,x0=2*(3*n+0)=3*2*n+0 。 所以,
δ (q0,0)= q0;
读入 1时,M到达下一个状态的字符串为 x1,
x1=2*(3*n+0)+1=3*2*n+1。所以,δ (q0,
1)= q1;
2009-7-26 249
3.2有穷状态自动机
q1——能引导 M到达此状态的 x除以 3余 1,
所以有,x=3*n+1。
读入 0时,引导 M到达下一个状态的字符串为 x0,x0=2*(3*n+1)=3*2*n+2。 所以即:
δ (q1,0)= q2;
读入 1时,引导 M到达下一个状态的字符串为 x1,
x1=2*(3*n+1)+1=3*2*n+2+1=3*(2*n+1)。
所以 δ (q1,1)= q0
2009-7-26 250
3.2有穷状态自动机
q2——能引导 M到达此状态的 x除以 3余 2,所以:
x=3*n+2。
读入 0时,引导 M到达下一个状态的字符串为 x0,
x0=2*(3*n+2)=3*2*n+4=3*(2*n+1)+1。 所以 δ (q2,
0)= q1;
读入 1时,引导 M到达下一个状态的字符串为 x1,
x1=2*(3*n+2)+1=3*2*n+4+1=3*(2*n+1)+2。所以,
δ (q2,1)= q2 。
2009-7-26 251
3.2有穷状态自动机
接受语言 {x|x∈ {0,1}*,且当把 x看成二进制数时,x模 3与 0同余 }的 DFA如下:
2009-7-26 252
3.2有穷状态自动机
例 3-6 构造一个 DFA,它接受的语言
L={x|x∈ {0,1}*,且对 x中任意一个长度不大于 5的子串 a1a2… an,
a1+a2+… +an? 3,n? 5} 。
输入串为 a1a2… ai… ai+4ai+5… am
2009-7-26 253
3.2有穷状态自动机
当 i=1,2,3,也就是 M读到输入串的第 1、
2,3个字符时,它需要将这些字符记下来。
因为 a1…… ai可能需要用来判定输入串的最初 4~5个字符组成的子串是否满足语言的要求。
当 i=4,5,也就是 M读到输入串的第 4,5个字符时,在 a1+a2+…… +ai? 3的情况下,M
需要将 a1…… ai记下来;在 a1+a2+…… +ai>3
时,M应该进入陷阱状态 qt。
2009-7-26 254
3.2有穷状态自动机
当 i=6,也就是 M读到输入串的第 6个字符,
此时,以前读到的第 1个字符 a1就没有用了,
此时它要看 a2+a3+… +a6? 3是否成立,如果成立,M需要将 a2… a6记下来;在
a2+a3+… +ai>3时,M应该进入陷阱状态 qt。
2009-7-26 255
3.2有穷状态自动机
当 M完成对子串 a1a2… ai… ai+4的考察,并发现它满足语言的要求时,M记下来的是
ai… ai+4,此时它读入输入串的第 i+5个字符
ai+5,以前读到的第 i个字符 ai就没有用了,
此时它要看 ai+1+ai+2+… +ai+5? 3是否成立,
如果成立,M需要将 ai+1,ai+2,…,ai+5记下来;在 ai+1+ai+2+… +ai+5>3时,M应该进入陷阱状态 qt。
2009-7-26 256
3.2有穷状态自动机
M需要记忆的内容有:
什么都未读入 ——20=1种;
记录有 1个字符 ——21=2种;
记录有 2个字符 ——22=4种;
记录有 3个字符 ——23=8种;
记录有 4个字符 ——24-1=15种;
记录有 5个字符 ——25-6=26种;
记录当前的输入串不是句子 ——1种。
2009-7-26 257
3.2有穷状态自动机状态设置
q[ε ]——M还未读入任何字符;
qt——陷阱状态;
q[a1a2… ai]——M记录有 i个字符,1? i? 5。 a1,
a2,…,ai∈ {0,1}。
取 DFA M=(Q,{0,1},δ,q[ε ],F)
F={ q[ε ] }∪ { q[a1a2… ai]| a1,a2,…,ai∈ {0,1}且
1? i? 5且 a1+a2+… +ai? 3}
Q={qt }∪ F
2009-7-26 258
3.2有穷状态自动机
δ (q[ε ],a1)=q[a1]
δ (q[a1],a2)=q[a1a2]
δ (q[a1a2],a3)=q[a1a2a3]
q[a1a2a3a] 如果 a1+a2+a3+a? 3
δ (q[a1a2a3],a)=
qt 如果 a1+a2+a3+a>3
2009-7-26 259
3.2有穷状态自动机
q[a1a2a3a4a] 如果 a1+a2+a3+a4+a? 3
δ (q[a1a2a3a4],a)=
qt 如果 a1+a2+a3+a4+a>3
q[a2a3a4a5a] a2+a3+a4+ a5+a? 3
δ (q[a1a2a3a4a5],a)=
qt 如果 a2+a3+a4+ a5+a>3
δ (qt,a1)=qt
2009-7-26 260
3.3 NFA
3.3.1 作为对 DFA的修改
希望是接受 {x|x∈ {0,1}*,且 x含有子串 00
或 11}的 FA如下:
2009-7-26 261
3.3.1 作为对 DFA的修改
希望是接受 {x|x∈ {0,1}*,且 x 的倒数第 10
个字符为 1}的 FA如下,
2009-7-26 262
3.3.1 作为对 DFA的修改
这两个图所给的,FA”与前面我们所定义的 FA,即 DFA,的区别在于:
⑴ 并不是对于所有的 (q,a)∈∑ × Q,δ (q,
a)都有一个状态与它对应;
⑵ 并不是对于所有的 (q,a)∈∑ × Q,δ (q,
a)只对应一个状态。
,FA”在任意时刻可以处于有穷多个状态。
,FA”具有,智能,。
2009-7-26 263
3.3.2 NFA的形式定义
不确定的有穷状态自动机 (non-deterministic
finite automaton,NFA)
M是一个五元组
M=(Q,∑,δ,q0,F)
– Q,∑,q0,F的意义同 DFA。
– δ,Q× ∑?2Q,对?(q,a)∈ Q× ∑,δ(q,a)=
{p1,p2,…,pm}表示 M在状态 q读入字符 a,可以选择地将状态变成 p1,或者 p2,…,或者 pm,
并将读头向右移动一个带方格而指向输入字符串的下一个字符 。
2009-7-26 264
3.3.2 NFA的形式定义
FA的状态转移图,FA的状态对应的等价类、
FA的即时描述对 NFA都有效。
接受 {x|x∈ {0,1}*,且 x含有子串 00或 11}的 FA
对应的移动函数定义表。
2009-7-26 265
3.3.2 NFA的形式定义状态说明 状态 输入字符
0 1
启动状态 q0 {q0,q1} { q0,q2}
q1 {q3} Φ
q2 Φ {q3}
终止状态 q3 {q3} {q3}
2009-7-26 266
3.3.2 NFA的形式定义
接受 {x|x∈ {0,1}*,且 x 的倒数第 10个字符为 1}的 FA对应的移动函数定义表。
2009-7-26 267
3.3.2 NFA的形式定义状态说明 状态 输入字符
0 1
启动状态 q0 {q0 } {q0,q1}
q1 {q2} {q2}
q2 {q3} {q3}
q3 {q4} {q4}
q4 {q5} {q5}
q5 {q6} {q6}
q6 {q7} {q7}
q7 {q8} {q8}
q8 {q9} { q9}
q9 {q10} { q10}
终止状态 q10 Φ Φ
2009-7-26 268
3.3.2 NFA的形式定义
将 δ 扩充为
QQ 2:? *
对任意的 q∈ Q,w∈∑ *,a∈∑,定义
a ) },δ ( r∈p,使得w),(q ∈$r|{p),(?)2(
),(?)1(
waq
qq
2009-7-26 269
3.3.2 NFA的形式定义
a)(q,
a)}(q,p|{p
a)}δ (r,∈p},{|{p
a)}δ (r,∈pε ),(q,∈r|{p
),(
),(
qr
aqaq
和关于 DFA的结论一样,两值相同,也不用区分这两个符号。
2009-7-26 270
3.3.2 NFA的形式定义
进一步扩充 δ 的定义域,δ,2Q× ∑ *?2Q。
对任意的 P?Q,w∈∑ *
Pq
wqwP
),(),(
2009-7-26 271
3.3.2 NFA的形式定义
由于,对?(q,w)∈ Q× ∑ *
),(
),()},({
}{
wq
wqwq
qq
所以,不一定严格地区分 δ 的第 1个分量是一个状态还是一个含有一个元素的集合。
2009-7-26 272
3.3.2 NFA的形式定义
对任意的 q∈ Q,w∈∑ *,a∈∑,
δ (q,wa)=δ (δ (q,w),a)
对输入字符串 a1a2… an
δ (q,a1a2… an)=δ ((… δ (δ (q,a1),a2),… ),an) 。
2009-7-26 273
3.3.2 NFA的形式定义
M接受 (识别 )的语言
– 对于?x∈∑ *,如果 δ (q0,w) ∩ F≠ Φ,
则称 x被 M接受,如果 δ (q0,w)∩ F=Φ,
则称 M不接受 x。
–L(M)={x| x∈∑ *且 δ (q0,w) ∩ F≠ Φ },
称为由 M接受 (识别 )的语言 。
2009-7-26 274
3.3.3 NFA与 DFA等价
对于一个输入字符,NFA与 DFA的差异是前者可以进入若干个状态,而后者只能进入一个惟一的状态。虽然从 DFA看待问题的角度来说,NFA在某一时刻同时进入若干个状态,但是,这若干个状态合在一起的,总效果,相当于它处于这些状态对应的一个,综合状态,。因此,我们考虑让
DFA用一个状态去对应 NFA的一组状态。
2009-7-26 275
3.3.3 NFA与 DFA等价
NFA M1=(Q,∑,δ 1,q0,F1)与 DFA
M2=(Q2,∑,δ 2,q0′,F2)的对应关系:
– NFA从开始状态 q0启动,我们就让相应的 DFA
从状态 [q0]启动。所以 q0′ =[ q0]。
– 对于 NFA 的一个状态组 {q1,q2,…,qn},如果 NFA在此状态组时读入字符 a后可以进入状态组 {p1,p2,…,pm},则让相应的 DFA在状态
[q1,q2,…,qn]读入字符 a时,进入状态 [p1,
p2,…,pm]。
2009-7-26 276
3.3.3 NFA与 DFA等价定理 3-1 NFA与 DFA等价。
证明:
(1)构造与 M1等价的 DFA M2 。
M1=(Q,∑,δ 1,q0,F1)
M2=(Q2,∑,δ 2,[q0],F2)
Q2=2Q
F2={[p1,p2,…,pm]|{p1,p2,…,pm}?Q&{p1,
p2,…,pm}∩ F1≠ Φ }
2009-7-26 277
3.3.3 NFA与 DFA等价
δ 2([q1,q2,…,qn],a)=[p1,p2,…,pm]
δ 1({q1,q2,…,qn},a)= {p1,p2,…,
pm}
(2) 证明 δ 1(q0,x)= {p1,p2,…,pm}
δ 2([q0],x)=[p1,p2,…,pm]。
设 x∈∑ *,施归纳于 |x|
x=ε,δ 1(q0,ε )= {q0},δ 2([q0],ε )=[q0]
2009-7-26 278
3.3.3 NFA与 DFA等价设当 |x|=n是结论成立。下面证明当 |x|=n+1是结论也成立。不妨设 x=wa,|w|=n,a∈∑
δ1(q0,wa)=δ1(δ1(q0,w),a)
=δ1({q1,q2,…,qn},a)
={p1,p2,…,pm}
由归纳假设,
δ 1(q0,w)={q1,q2,…,qn}?δ 2([q0],
w)=[q1,q2,…,qn]
2009-7-26 279
3.3.3 NFA与 DFA等价根据 δ 2的定义,
δ 2([q1,q2,…,qn],a)=[p1,p2,…,pm]
δ 1({q1,q2,…,qn},a)={p1,p2,…,
pm}
所以,
δ 2([q0],wa)=δ 2(δ 2([q0],w),a)
=δ 2([q1,q2,…,qn],a)
=[p1,p2,…,pm]
2009-7-26 280
3.3.3 NFA与 DFA等价故,如果 δ 1(q0,wa)= {p1,p2,…,pm}则必有 δ 2([q0],wa)= [p1,p2,…,pm]。
由上述推导可知,反向的推导也成立 。 这就是说,结论对 |x|=n+1也成立 。
由归纳法原理,结论对?x∈∑ *成立。
2009-7-26 281
3.3.3 NFA与 DFA等价
(3) 证明 L(M1)=L(M2)
设 x∈ L(M1),且 δ 1(q0,x)= {p1,p2,…,
pm},
从而 δ 1(q0,x)∩ F1≠ Φ,
这就是说,{p1,p2,…,pm}∩ F1≠ Φ,
由 F2的定义,[p1,p2,…,pm]∈ F2。
2009-7-26 282
3.3.3 NFA与 DFA等价再由 (2)知,
δ 2([q0],x)=[p1,p2,…,pm]
所以,x∈ L(M2)。 故 L(M1)?L(M2)。
反过来推,可得 L(M2)? L(M1)。
从而 L(M1)=L(M2)得证 。
综上所述,定理成立。
2009-7-26 283
例 3-7 图 3-9所示的 NFA 对应的 DFA的状态转移函数如表 3-7所示。
图 3-9
2009-7-26 284
表 3-7 状态转移函数状态说明 状态 输入字符
0 1
启动? [q0] [q0,q1] [q0,q2]
[q1] [q3] [Φ ]
[q2] [Φ ] [q3]
终止 [q3] [q3] [q3]
[q0,q1] [q0,q1,q3] [q0,q2]
[q0,q2] [q0,q1] [q0,q2,q3]
终止 [q0,q3] [q0,q1,q3] [q0,q2,q3]
[q1,q2] [q3] [q3]
终止 [q1,q3] [q3] [q3]
终止 [q2,q3] [q3] [q3]
[q0,q1,q2] [q0,q1,q3] [q0,q2,q3]
终止? [q0,q1,q3] [q0,q1,q3] [q0,q2,q3]
终止? [q0,q2,q3] [q0,q1,q3] [q0,q2,q3]
终止 [q1,q2,q3] [q3] [q3]
终止 [q0,q1,q2,q3] [q0,q1,q3] [q0,q2,q3]
[Φ ] [Φ ] [Φ ]
2009-7-26 285
3.3.3 NFA与 DFA等价
不可达状态 (inaccessible state),不存在从 [q0]对应的顶点出发,到达该状态对应的顶点的路。我们称此状态从开始状态是不可达的。
表 3-7中,所有标记,?” 的状态是从开始状态可达的,其他是不可达的 ——无用的。
2009-7-26 286
3.3.3 NFA与 DFA等价
构造给定 NFA等价的 DFA策略
– 先只把开始状态 [q0]填入表的状态列中,如果表中所列的状态列有未处理的,则任选一个未处理的状态 [q1,q2,…,qn],对 ∑ 中的每个字符 a,计算 δ ([q1,q2,…,qn],a),并填入相应的表项中,如果 δ ([q1,q2,…,qn],a)在表的状态列未出现过,则将它填入表的状态列。
如此重复下去,直到表的状态列中不存在未处理的状态。
2009-7-26 287
3.3.3 NFA与 DFA等价图 3-11 图 3-9所示 NFA的等价 DFA
2009-7-26 288
3.4 带空移动的有穷状态自动机
接受语言 {0n1m2k|n,m,k≥0}的 NFA
2009-7-26 289
3.4 带空移动的有穷状态自动机
接受语言 {0n1m2k|n,m,k≥0}的 NFA是否可以构造成下图所示的,ε-NFA”?
其构造显然比图 1-13所示的 NFA更容易。
当然还希望它们是等价的。
2009-7-26 290
3.4 带空移动的有穷状态自动机
带空移动的不确定的有穷状态自动机 (non-
deterministic finite automaton with ε-
moves,ε-NFA)
M=(Q,∑,δ,q0,F),Q,∑,q0,F的意义同
DFA。
δ,Q× (∑∪ {ε})?2Q
2009-7-26 291
3.4 带空移动的有穷状态自动机
非空移动
–?(q,a)∈ Q× ∑
–δ(q,a)= {p1,p2,…,pm}
–表示 M在状态 q读入字符 a,可以选择地将状态变成 p1,p2,… 或者 pm,并将读头向右移动一个带方格而指向输入字符串的下一个字符。
2009-7-26 292
3.4 带空移动的有穷状态自动机
空移动
–?q∈ Q
–δ(q,ε)= {p1,p2,…,pm}
–表示 M在状态 q不读入任何字符,可以选择地将状态变成 p1,p2,… 或者 pm。也可以叫做 M在状态 q做一个空移动 (又可以称为 ε移动 ),并且选择地将状态变成 p1、
p2,… 或者 pm。
2009-7-26 293
3.4 带空移动的有穷状态自动机
进一步扩充 δ 的定义域,δ,2Q× ∑ *?2Q。
对任意的 P?Q,w∈∑ * 。
对任意的 q∈ Q,w∈∑ *,a∈∑ 。
⑴ ε -CLOSURE(q)={p|从 q到 p有一条标记为 ε 的路 }。
Pp
pC L O S U R EPC L O S U R E
)()()2(
2009-7-26 294
3.4 带空移动的有穷状态自动机
)(),(?)3( qC L O S U R Eq
),(
),(
)},(),(
|{
)(),(
)4(
wrr
ar
arpwqrpP
PC L O S U R Ewaq
使得
2009-7-26 295
3.4 带空移动的有穷状态自动机
进一步扩展移动函数,2 Q× ∑?2Q 。
对任意 (P,a)∈ 2Q× ∑ 。
Pq
aqaP
),(),()5(
Pq
wqwP
),(?),(?)6(
2009-7-26 296
3.4 带空移动的有穷状态自动机
在 ε -NFA中,对任意 a∈∑,q∈ Q,
),(),(? aqaq
需要严格区分。
2009-7-26 297
图 3-14 所示 ε -NFA
状态
δ
ε 0 1 2 ε 0 1 2
q0 { q1} { q0} Φ Φ {q0,q1
,q2}
{q0,q1
,q2}
{q1,
q2}
{q2}
q1 { q2} Φ { q1} Φ {q1,q2} Φ {q1,
q2}
{q2}
q2 Φ Φ Φ { q2} {q2} Φ Φ {q2}
2009-7-26 298
3.4 带空移动的有穷状态自动机
M接受 (识别 )的语言对于?x∈∑ *,仅当
Fxq?),(? 0?
时,称 x被 M接受。
}),(?|{)( 0* FxqxxML并且
2009-7-26 299
3.4 带空移动的有穷状态自动机定理 3-2ε -NFA与 NFA等价。
证明:设有 ε -NFA M1=(Q,∑,δ 1,q0,
F)
(1) 构造与之等价的 NFA M2 。
取 NFA M2=(Q,∑,δ 2,q0,F2)
F∪ {q0} 如果 F∩ε-CLOSURE(q0)≠Φ
F2=
F 如果 F∩ ε -CLOSURE(q0)=Φ
),(?),( 12 aqaq
2009-7-26 300
3.4 带空移动的有穷状态自动机
(2) 施归纳于 |x|,证明对?x∈∑ + 。
),(?),( 12 xqxq
δ 2(q0,x)= δ 2(q0,wa)
=δ 2(δ 2(q0,w),a)
=δ 2((q0,w),a)
2009-7-26 301
3.4 带空移动的有穷状态自动机
),(
),(
),(),,(
|({
)),((
),(
),(
01
01
101
),(
1
),(
1
),(
2
01
01
01
xq
waq
aqpwqqpC L O S U R E
aqC L O S U R E
aq
aq
wqq
wqq
wqq
2009-7-26 302
3.4 带空移动的有穷状态自动机
(3) 证明,对?x∈∑ +,δ 2(q0,x) ∩ F2≠ Φ
的充分必要条件是
Fxq?),(?1?
⑷ 证明 ε ∈ L(M1)?ε ∈ L(M2) 。
2009-7-26 303
3.4 带空移动的有穷状态自动机
例 3-4 求与图 3-14所示 ε -NFA等价的 NFA。
2009-7-26 304
3.5 FA是正则语言的识别器
3.5.1 FA与右线性文法
DFA M=(Q,∑,δ,q0,F),处理句子
a1a2… an的特性。
⑴ M按照句子 a1a2… an中字符的出现顺序,
从开始状态 q0开始,依次处理字符 a1、
a2,…,an,在这个处理过程中,每处理一的字符进入一个状态,最后停止在某个终止状态。
2009-7-26 305
3.5.1 FA与右线性文法
⑵ 它每次处理且仅处理一个字符:第 i步处理输入字符 ai。
⑶ 对应于使用 δ (q,a)=p的状态转移函数的处理,相当于是在状态 q完成对 a的处理,
然后由 p接下去实现对后续字符的处理 。
⑷ 当 δ (q,a)=p∈ F,且 a是输入串的最后一个字符时,M完成对此输入串的处理。
2009-7-26 306
3.5.1 FA与右线性文法
A0? a1A1 对应产生式 A0?a1A1
a1a2A2 对应产生式 A1?a2A2
…
a1a2… an-1An-1 对应产生式 An-2?an-1An-1
a1a2… an-1an 对应产生式 An-1?an
2009-7-26 307
3.5.1 FA与右线性文法
q0 a1a2… an-1an
├ a1q1 a2… an-1an 对应 δ (q0,a1)=q1
├ a1a2q2… an-1an 对应 δ (q1,a2)=q2
……
├ a1a2… an-1qn-1an 对应 δ (qn-2,an-1)=qn-1
├ a1a2… an-1anqn 对应 δ (qn-1,an)=qn
2009-7-26 308
3.5.1 FA与右线性文法
其中 qn为 M的终止状态。考虑根据 a1、
a2,…,an,让 A0与 q0对应,A1与 q1对应、
A2与 q2对应,…,An-2与 qn-2对应,An-1与 qn-
1对应。这样,就有希望得到满足定理 2-4-1
的正则文法的推导与 DFA的互相模拟的方式。
2009-7-26 309
3.5.1 FA与右线性文法定理 3-3 FA接受的语言是正则语言。
证明:
(1) 构造。
基本思想是让 RG的派生对应 DFA的移动。
设 DFA M=(Q,∑,δ,q0,F),
取右线性文法 G=(Q,∑,P,q0),
P={q?ap|δ(q,a)=p}∪ {q?a|δ(q,a)=p∈ F}
2009-7-26 310
3.5.1 FA与右线性文法
( 2) 证明 L(G)=L(M)-{ε}。
对于 a1a2… an-1an∈ ∑+,
q0?+ a1a2… an-1an
q0? a1q1,q1? a2q2,…,
qn-2? an-1qn-1,qn-1? an∈ P
δ(q0,a1)=q1,δ(q1,a2)=q2,…
,δ(qn-2,an-1)=qn-1,δ(qn-1,an)=qn,且
qn∈ F
δ(q0,a1a2… an-1an)= qn∈ F
a1a2…a n-1an∈ L(M)
2009-7-26 311
3.5.1 FA与右线性文法
( 3) 关于 ε句子。
如果 q0?F,则 ε?L(M),L(G)=L(M)。
如果 q0∈ F,则由定理 2-6和定理 2-7,存在正则文法 G′,使得 L(G′)=L(G)∪ {ε}=L(M)。
综上所述,对于任意 DFA M,存在正则文法
G,使得 L(G)=L(M)。
定理得证。
2009-7-26 312
3.5.1 FA与右线性文法
例 3-9 与图 3-8 所给 DFA等价的正则文法
qs?0|0q0|1q1
q0?0|0q0|1q1
q1?0q2|1|1q0
q2?0q1|1q2
2009-7-26 313
3.5.1 FA与右线性文法
与图 3-7 所给的 DFA等价的正则文法
q0?0q1|1qt|2qt
q1?0q1|1q2|2qt
q2?0qt|1q2|2q3|2
q3?0qt|1qt|2q3|2
qt? 0qt|1qt|2qt
2009-7-26 314
3.5.1 FA与右线性文法定理 3-4正则语言可以由 FA接受。
证明:
( 1)构造。
基本思想:让 FA模拟 RG的派生 。
设 G=(V,T,P,S),且 ε?L(G),
取 FA M=( V∪ {Z},T,δ,S,{Z}),Z?V。
2009-7-26 315
3.5.1 FA与右线性文法
对?(a,A)∈ T× V
{B|A?aB∈ P}∪ {Z} 如果 A?a∈ P
δ(A,a)=
{B|A?aB∈ P} 如果 A?a?P
用 B∈ δ(a,A)与产生式 A?aB对应用 Z∈ δ(a,A)与产生式 A?a对应 。
2009-7-26 316
3.5.1 FA与右线性文法
( 2) 证明 L(M)=L(G)
对于 a1a2… an-1an∈ T+,
a1a2… an-1an∈ L(G)? S?+ a1a2… an-1an
S?a1A1? a1a2A2?…
a1a2… an-1An-1? a1a2… an-1an
S?a1A1,A1?a2A2,…,
An-2?an-1An-1,An-1?an∈ P
2009-7-26 317
3.5.1 FA与右线性文法
A1∈ δ(S,a1),A2∈ δ(A1,a2),…,
An-1∈ δ(An-2,an-1),Z∈ δ(An-1,an)
Z∈ δ(S,a1a2… an-1an )
a1a2… an-1an∈ L(M)
对于 ε,按照定理 2-5和定理 2-6处理。
2009-7-26 318
3.5.1 FA与右线性文法
例 3-10 构造与所给正则文法等价的 FA:
G1,E?0A|1B
A?1|1C
B?0|0C
C?0B|1A
2009-7-26 319
3.5.1 FA与右线性文法
δ (E,0)={A} 对应 E?0A
δ (E,1)={B} 对应 E?1B
δ (A,1)={Z,C} 对应 A?1|1C
δ (B,0)={Z,C} 对应 B?0|0C
δ (C,0)={B} 对应 C?0B
δ (C,1)={A} 对应 C?1A
2009-7-26 320
3.5.1 FA与右线性文法
2009-7-26 321
3.5.1 FA与右线性文法推论 3-1 FA与正则文法等价。
证明:根据定理 3-3和定理 3-4即可得到。
2009-7-26 322
3.5.1 FA与左线性文法
按照推导来说,句子 a1a2… an-1an中的字符被推导出的先后顺序正好与它们在句子中出现的顺序相反;而按照归约来看,它们被归约成语法变量的顺序则正好与它们在句子中出现的顺序相同,a1,a2,…,an-1,
an。可见,归约过程与 FA处理句子字符的顺序是一致的,所以可考虑依照,归约,
来研究 FA的构造。
2009-7-26 323
3.5.1 FA与左线性文法
对于形如 A?a的产生式:在推导中,一旦使用了这样的产生式,句型就变成了句子,
而且 a是该句子的第一个字符;按,归约,
理解,对句子的第 1个字符,根据形如 A?a
的产生式进行归约。对应到 FA中,FA从开始状态出发,读到句子的第一个字符 a,应将它,归约,为 A。我们如果考虑用语法变量对应 FA的状态,那么,此时我们需要引入一个开始状态,比如说,Z。这样,对应形如 A?a的产生式,可以定义 A∈ δ (Z,a)。
2009-7-26 324
3.5.1 FA与左线性文法
按照上面的分析,对应于形如 A?Ba的产生式,FA应该在状态 B读入 a时,将状态转换到 A。也可以理解为:在状态 B,FA已经将当前句子的、处理过的前缀,归约,成了 B,
在此时它读入 a时,要将 Ba归约成 A,因此,
它进入状态 A。
2009-7-26 325
3.5.1 FA与左线性文法
按照,归约,的说法,如果一个句子是文法 G产生的语言的合法句子,它最终应该被归约成文法 G的开始符号。所以,G的开始符号对应的状态就是相应的 FA的终止状态。
如何解决好开始符号只有一个,而 DFA的终止状态可以有多个的问题。
2009-7-26 326
3.5.1 FA与左线性文法
例如:对文法
G2,E?A0|B1
A?1|C1
B?0|C0
C?B0|A1
对应
δ(A,0)={E}
δ(B,1)={E}
δ(Z,1)={A} δ(C,
1)={A}
δ(Z,0)={B}
δ(C,0)={B}
δ(B,0)={C}
δ (A,1)={C}
2009-7-26 327
3.5.1 FA与左线性文法
G2,E?A0|B1
A?1|C1
B?0|C0
C?B0|A1
2009-7-26 328
3.5.1 FA与左线性文法
DFA (的状态转移图 )作如下,预处理,,
⑴ 删除 DFA的陷阱状态 (包括与之相关的弧 );
⑵ 在图中加一个识别状态;
⑶,复制,一条原来到达终止状态的弧,
使它从原来的起点出发,到达新添加的识别状态 。
2009-7-26 329
3.5.1 FA与左线性文法
⑴ 如果 δ (A,a)=B,则有产生式 B?Aa;
⑵ 如果 δ (A,a)=B,且 A是开始状态,则有产生式 B?a。
定理 3-5 左线性文法与 FA等价。
2009-7-26 330
3.6 FA的一些变形
3.6.1 双向有穷状态自动机
确定的双向有穷状态自动机 (two-way
deterministic finite automaton,2DFA)
M=(Q,∑,δ,q0,F)
Q,∑,q0,F的意义同 DFA。
2009-7-26 331
3.6.1 双向有穷状态自动机
δ,Q× ∑?Q× {L,R,S},对?(q,a)∈ Q× ∑
– 如果 δ (q,a)= {p,L},它表示 M在状态 q读入字符 a,将状态变成 p,并将读头向左移动一个带方格而指向输入字符串的前一个字符。
– 如果 δ (q,a)= {p,R},它表示 M在状态 q读入字符 a,将状态变成 p,并将读头向右移动一个带方格而指向输入字符串中下一个字符。
– 如果 δ (q,a)= {p,S},它表示 M在状态 q读入字符 a,将状态变成 p,读头保持在原位不动。
2009-7-26 332
3.6.1 双向有穷状态自动机
M接受的语言
L(M)={x| q0x├ *xp且 p∈ F} 是 2DFA接受的语言。
定理 3-6 2DFA与 FA等价。
2009-7-26 333
3.6.1 双向有穷状态自动机
不确定的双向有穷状态自动机 (two-way
nondeterministic finite automaton,
2NFA)
M=(Q,∑,δ,q0,F)
Q,∑,q0,F的意义同 DFA。
δ,Q× ∑?2Q× {L,R,S} 。
2009-7-26 334
3.6.1 双向有穷状态自动机
δ (q,a)= {( p1,D1)( p2,D2) …,(pm,Dm) }
表示 M在状态 q读入字符 a,可以选择地将状态变成 p1同时按 D1实现对读头的移动、
或者将状态变成 p2同时按 D2实现对读头的移动,…… 或者将状态变成 pm同时按 Dm实现对读头的移动。其中 D1,D2,…,
Dm∈ {L,R,S},表示的意义与 2DFA的定义表示的意义相同 。
2009-7-26 335
3.6.1 双向有穷状态自动机定理 3-7 2NFA与 FA等价。
2009-7-26 336
3.6.2 带输出的 FA
Moore机
M=(Q,∑,Δ,δ,λ,q0)
Q,∑,q0,δ 的意义同 DFA。
Δ ——输出字母表 (output alphabet)。
λ,Q?Δ 为输出函数。对?q∈ Q,λ (q)=a
表示 M在状态 q时输出 a。
2009-7-26 337
3.6.2 带输出的 FA
对于?a1a2… an-1an∈∑ *,如果
δ (q0,a1)=q1,δ (q1,a2)=q2,…,δ (qn-2,
an-1)=qn-1,δ (qn-1,an)=qn,
则 M的输出为
λ (q0,a1)λ (q1,a2)… λ (qn-1,an)
2009-7-26 338
3.6.2 带输出的 FA
Mealy机
M=(Q,∑,Δ,δ,λ,q0)
Δ ——输出字母表。
λ,Q× ∑?Δ 为输出函数。对?(q,
a)∈ Q× ∑,λ (q,a)=d表示 M在状态 q读入字符 a时输出 d。
2009-7-26 339
3.6.2 带输出的 FA
对于?a1a2… an-1an∈∑ *,M的输出串为:
λ (q0,a1)λ (δ (q0,a1),a2) … λ ((… δ (δ (q0,
a1),a2)… ),an)
设 δ (q0,a1)=q1,δ (q1,a2)=q2,…,δ (qn-2,
an-1)=qn-1,δ (qn-1,an)=qn,
则 M的输出可以表示成:
λ (q0,a1)λ (q1,a2) … λ (qn-1,an)
2009-7-26 340
3.6.2 带输出的 FA
Moore机处理该串时每经过一个状态,就输出一个字符:输出字符和状态一一对应;
Mealy机处理该串时的每一个移动输出一个字符:输出字符和移动一一对应。
2009-7-26 341
3.6.2 带输出的 FA
如果对于?x∈∑ *,T1(x)=λ 1(q0)T2(x),则
Moore机 M1=(Q1,∑,Δ,δ 1,λ 1,q01)
与 Mealy机 M2=(Q2,∑,Δ,δ 2,λ 2,
q02),是等价的,其中,T1(x)和 T2(x)分别表示 M1和 M2关于 x的输出 。
定理 3-8 Moore机与 Mealy机等价 。
2009-7-26 342
3.7 小结本章讨论正则语言的识别器 ——FA。
包括 DFA,NFA,ε -NFA。 RG与 FA的等价性。简单介绍带输出的 FA和双向 FA。
⑴ FA M是一个五元组,M=(Q,∑,δ,
q0,F),它可以用状态转移图表示 。
⑵ M接受的语言为 {x| x∈∑ *且 δ (q,
x)∈ F}。 如果 L(M1)=L(M2),则称 M1与 M2
等价 。
⑶ FA的状态具有有穷的存储功能 。 这一特性可以用来构造接受一个给定语言的 FA。
2009-7-26 343
3.7 小结
⑷ NFA允许 M在一个状态下读入一个字符时选择地进入某一个状态,对于?x∈∑ *,
如果 δ (q0,x) ∩ F≠ Φ,则称 x被 M接受,
如果 δ (q0,x)∩ F=Φ,则称 M不接受 x。 M
接受的语言 L(M)={x| x∈∑ *且 δ (q0,x) ∩
F≠ Φ }。
2009-7-26 344
3.7 小结
⑸ ε -NFA是在 NFA的基础上,允许直接根据当前状态变换到新的状态而不考虑输入带上的符号 。 对?q∈ Q,δ (q,ε )= {p1,p2,…,
pm}表示 M在状态 q不读入任何字符,可以选择地将状态变成 p1,p2,… 或者 pm。 这叫做 M
在状态 q做一个空移动 。
⑹ NFA与 DFA等价,ε -NFA与 NFA等价,统称它们为 FA。
2009-7-26 345
3.7 小结
⑺ 根据需要,可以在 FA中设置一种特殊的状态 ——陷阱状态 。 但是,不可达状态却是应该无条件地删除的 。
⑻ FA是正则语言的识别模型 。 分别按照对推导和归约的模拟,可以证明 FA和左线性文法,右线性文法等价 。
2009-7-26 346
3.7 小结
⑼ 2DFA是 FA的又一种变形,它不仅允许读头向前移动,还允许读头向后移动 。 通过这种扩充,2DFA仍然与 FA等价 。
⑽ Moore机和 Mealy机是两种等价的带输出的 FA,Moore机根据状态决定输出字符,
Mealy机根据移动决定输出字符 。
2009-7-26 347
第 4章 正则表达式
正则文法擅长语言的产生,有穷状态自动机擅长语言的识别。
本章讨论正则语言的正则表达式描述。它在对正则语言的表达上具有特殊的优势,
为正则语言的计算机处理提供了方便条件。
– 简洁、更接近语言的集合表示和语言的计算机表示等。
2009-7-26 348
第 4章 正则表达式
主要内容
– 典型 RE的构造。
– 与 RE等价 FA的构造方法。
– 与 DFA等价的 RE的构造。
重点
– RE的概念。
– RE与 DFA的等价性。
难点,RE与 DFA的等价性证明。
2009-7-26 349
4.1 启示产生语言 {anbmck|n,m,k? 1}∪
{aicnbxam|i? 0,n? 1,m? 2,x为 d和 e组成的串 }
的正则文法为
A?aA|aB|cE
B?bB|bC
C?cC|c
E?cE|bF
F?dF|eF|aH
H?aH|a
2009-7-26 350
4.1 启示
接受此语言的 NFA M
2009-7-26 351
4.1 启示
计算集合 set(q)
set(A)={an|n? 0}={a}*
set(B)= set(A){a}{bn|n? 0}
={anabm|m,n? 0}
={a}*{a}{b}*={a}+{b}*
set(C)= set(B){b}{c}*
={a}*{a}{b}*{b}{c}*={a}+{b}+{c}*
set(D)= set(C) {c}={a}+{b}+{c}*{c}
={a}+{b}+{c}+
2009-7-26 352
4.1 启示
set(E)= set(A){c}{c}*
={a}*{c}{c}*={a}*{c}+
set(F)= set(E){b}{d,e}*={a}*{c}+{b}{d,e}*
set(H)= set(F){a}{a}*={a}*{c}+{d,e}*{a}{a}*
={a}*{c}+{d,e}*{a}+
set(I)= set(H){a}={a}*{c}+{d,e}*{a}+{a}
L(M)= set(D)∪ set(H)
= {a}+{b}+{c}+∪ {a}*{c}+{d,e}*{a}+{a}
2009-7-26 353
4.1 启示根据集合运算的定义,
{d,e}={d}∪ {e}。
从而,
{d,e}*=({d}∪ {e})*。
这样可以将 L(M)写成如下形式:
L(M)= {a}+{b}+{c}+∪ {a}*{c}+({d}∪ {e})*{a}+{a}
记作:
a+b+c++a*c+(d+e)*a+a= aa*bb*cc*+a*cc*(d+e)* aaa*
2009-7-26 354
4.2 RE的形式定义
正则表达式 (regular expression,RE)
⑴ Φ是 ∑上的 RE,它表示语言 Φ;
⑵ ε是 ∑上的 RE,它表示语言 {ε};
⑶ 对于?a∈ ∑,a是 ∑上的 RE,它表示语言
{a};
2009-7-26 355
4.2 RE的形式定义
⑷ 如果 r和 s分别是 ∑上表示语言 R和 S的 RE,则:
r与 s的,和,(r+s)是 ∑上的 RE,(r+s)表达的语言为 R∪ S;
r与 s的,乘积,(rs)是 ∑上的 RE,(rs)表达的语言为 RS;
r的克林闭包 (r*)是 ∑上的 RE,(r*)表达的语言为 R*。
⑸ 只有满足 ⑴,⑵,⑶,⑷ 的才是 ∑上的 RE。
2009-7-26 356
4.2 RE的形式定义
例 4-1 设 ∑={0,1}
⑴ 0,表示语言 {0};
⑵ 1,表示语言 {1};
⑶ (0+1),表示语言 {0,1};
⑷ (01),表示语言 {01};
⑸ ((0+1)*),表示语言 {0,1}*;
⑹ ((00)((00)*)),表示语言 {00}{00}*;
2009-7-26 357
4.2 RE的形式定义
⑺ ((((0+1)*)(0+1))((0+1)*)),表示语言 {0,1}+;
⑻ ((((0+1)*)000)((0+1)*)),表示 {0,1}上的至少含有 3个连续 0的串组成的语言;
⑼ ((((0+1)*)0)1),表示所有以 01结尾的 0,1
字符串组成的语言;
⑽ (1(((0+1)*)0)),表示所有以 1开头,并且以
0结尾的 0,1字符串组成的语言 。
2009-7-26 358
4.2 RE的形式定义
约定
⑴ r的正闭包 r+表示 r与 (r*)的乘积以及 (r*)与 r
的乘积:
r+=(r(r*))=((r*)r)
⑵ 闭包运算的优先级最高,乘运算的优先级次之,加运算,+”的优先级最低。所以,
在意义明确时,可以省略其中某些括号。
((((0+1)*)000)((0+1)*))=(0+1)*000(0+1)*
2009-7-26 359
4.2 RE的形式定义
((((0+1)*)(0+1))((0+1)*))=(0+1)*(0+1)(0+1)*
⑶ 在意义明确时,RE r表示的语言记为 L(r),
也可以直接地记为 r。
⑷ 加,乘,闭包运算均执行左结合规则 。
2009-7-26 360
4.2 RE的形式定义
相等 (equivalence)
– r,s是字母表 ∑上的一个 RE,如果 L(r)=L(s),
则称 r与 s相等,记作 r=s 。
– 相等也称为 等价。
几个基本结论
⑴ 结合律,(rs)t=r(st)
(r+s)+t=r+(s+t)
⑵ 分配律,r(s+t)=rs+rt
(s+t)r=sr+tr
2009-7-26 361
4.2 RE的形式定义
⑶ 交换律,r+s=s+r。
⑷ 幂等律,r+r=r。
⑸ 加法运算零元素,r+Φ=r。
⑹ 乘法运算单位元,rε=εr=r。
⑺ 乘法运算零元素,rΦ=Φr=Φ。
⑻ L(Φ)=Φ。
⑼ L(ε)={ε}。
⑽ L(a)={a}。
2009-7-26 362
4.2 RE的形式定义
⑾ L(rs)=L(r)L(s)。
⑿ L(r+s)=L(r)∪ L(s)。
⒀ L(r*)=(L(r))* 。
⒁ L(Φ*)={ε}。
⒂ L((r+ε)*)=L(r*)。
⒃ L((r*)*)=L(r*)。
⒄ L((r*s*)*)=L((r+s)*)。
⒅ 如果 L(r)?L(s),则 r+s=s。
2009-7-26 363
4.2 RE的形式定义
⒆ L(rn)=(L(r))n 。
⒇ rnrm=rn+m 。
一般地,r+ε ≠ r,(rs)n ≠ rnsn,rs≠ sr。
幂
r是字母表 ∑ 上的 RE,r的 n次 幂 定义为
⑴ r0=ε。
⑵ rn=rn-1r。
2009-7-26 364
4.2 RE的形式定义
例 4-2 设 ∑ ={0,1}
00表示语言 {00};
(0+1)*00(0+1)*表示所有的至少含两个连续
0的 0,1串组成的语言;
(0+1)*1(0+1)9表示所有的倒数第 10个字符为 1的串组成的语言;
2009-7-26 365
4.2 RE的形式定义
L((0+1)*011)={x|x是以 011结尾的 0,1串 };
L(0+1+2+)={0n1m2k|m,n,k≥1};
L(0*1*2*)={0n1m2k|m,n,k≥0};
L(1(0+1)*1+0(0+1)*0))={x|x的开头字符与尾字符相同 }。
2009-7-26 366
4.3 RE与 FA等价
正则表达式 r称为与 FA M等价,如果
L(r)=L(M)。
从开始状态出发,根据状态之间按照转移所确定的后继关系,依次计算出所给 FA的各个状态 q对应的 set(q),并且最终得到相应的 FA接受的语言的 RE表示。
寻找一种比较“机械”的方法,使得计算机系统能够自动完成 FA与 RE之间的转换。
2009-7-26 367
4.3.1 RE到 FA的等价变换
0对应的 FA
01对应的 FA
2009-7-26 368
4.3.1 RE到 FA的等价变换
0+1对应的 FA
2009-7-26 369
4.3.1 RE到 FA的等价变换
0*对应的 FA
2009-7-26 370
4.3.1 RE到 FA的等价变换定理 4-1 RE表示的语言是 RL。
证明:
施归纳于正则表达式中所含的运算符的个数 n,证明对于字母表 ∑上的任意正则表达式 r,存在 FA M,使得 L(M) = L(r) 。
– M恰有一个终止状态。
– M在终止状态下不作任何移动。
2009-7-26 371
4.3.1 RE到 FA的等价变换
n=0
r=ε r=Φ r=a
2009-7-26 372
4.3.1 RE到 FA的等价变换设结论对于 n=k时成立,此时有如下 FA:
M1=(Q1,∑,δ1,q01,{f1})
M2=(Q2,∑,δ2,q02,{f2})
L(M1)=L(r1),L(M2)=L(r2)。
Q1∩Q2=Φ。
n=k
2009-7-26 373
4.3.1 RE到 FA的等价变换
n=k+1
r=r1+r2
取 q0,f?Q1∪ Q2,令
M=(Q1∪ Q2∪ {q0,f},∑,δ,q0,{f})
① δ(q0,ε)={q01,q02};
② 对?q∈ Q1,a∈ ∑∪ {ε},δ(q,a)=δ1(q,a);
对?q∈ Q2,a∈ ∑∪ {ε},δ(q,a)=δ2(q,a);
③ δ(f1,ε)={f};
④ δ(f2,ε)={f}。
2009-7-26 374
4.3.1 RE到 FA的等价变换
n=k+1
r=r1+r2
2009-7-26 375
4.3.1 RE到 FA的等价变换
M=(Q1∪ Q2,∑,δ,q01,{f2})
① 对?q∈ Q1-{f1},a∈∑∪ {ε }
– δ (q,a)=δ 1(q,a);
② 对?q∈ Q2-{f2},a∈∑∪ {ε }
– δ (q,a)=δ 2(q,a);
③ δ (f1,ε )={q02}
2009-7-26 376
4.3.1 RE到 FA的等价变换
r=r1r2
2009-7-26 377
4.3.1 RE到 FA的等价变换
M=(Q1∪ {q0,f},∑,δ,q0,{f})
其中 q0,f?Q1,定义 δ 为
① 对?q∈ Q1-{f1},a∈∑,
δ (q,a)=δ 1(q,a)。
② δ (f1,ε )={q01,f}。
③ δ (q0,ε )={q01,f}。
2009-7-26 378
4.3.1 RE到 FA的等价变换
r=r1*
2009-7-26 379
4.3.1 RE到 FA的等价变换
按照定理 4-1证明给出的方法构造一个给定
RE的等价 FA时,该 FA有可能含有许多的空移动。
可以按照自己对给定 RE的,理解,以及对
FA的,理解,,直接地,构造出一个比较,简单,的 FA。
定理证明中所给的方法是机械的。由于
,直接地,构造出的 FA的正确性依赖于构造者的,理解,,所以它的正确性缺乏有力的保证。
2009-7-26 380
4.3.1 RE到 FA的等价变换
例 4-3 构造与 (0+1)*0+(00)*等价的 FA。
2009-7-26 381
4.3.1 RE到 FA的等价变换
按照对 (0+1)*0+(00)*的,理解,,直接地,
构造出的 FA。
2009-7-26 382
4.3.2 RL可以用 RE表示
计算 DFA的每个状态对应的集合 ——字母表的克林闭包的等价分类,是具有启发意义的。
这个计算过程难以,机械,地进行。
计算 q1到 q2的一类串的集合,Rkij 。
图上作业法。
2009-7-26 383
4.3.2 RL可以用 RE表示定理 4-2 RL可以用 RE表示。
设 DFA
M=({q1,q2,…,qn},∑,δ,q1,F)
Rkij={x|δ (qi,x)=qj而且对于 x的任意前缀
y(y≠ x,y≠ ε ),如果 δ (qi,y)=ql,则 l? k}。
2009-7-26 384
4.3.2 RL可以用 RE表示
R0ij=
{a|δ (qi,a)=qj} 如果 i≠ j
{a|δ (qi,a)=qj}∪ {ε } 如果 i=j
Rkij= Rk-1ik( Rk-1kk)* Rk-1kj Rk-1ij
Fq
n
f
f
RML
1)(
2009-7-26 385
4.3.2 RL可以用 RE表示
图上作业法启示
2009-7-26 386
4.3.2 RL可以用 RE表示
图上作业法操作步骤
⑴ 预处理:
① 用标记为 X和 Y的状态将 M“括起来,,
在状态转移图中增加标记为 X和 Y的状态,
从标记为 X的状态到标记为 q0的状态引一条标记为 ε 的弧;从标记为 q(q∈ F)的状态到标记为 Y的状态分别引一条标记为 ε 的弧 。
② 去掉所有的不可达状态 。
2009-7-26 387
4.3.2 RL可以用 RE表示
⑵ 对通过步骤 (1)处理所得到的状态转移图重复如下操作,直到该图中不再包含除了标记为 X和 Y外的其他状态,并且这两个状态之间最多只有一条弧。
并弧
– 将从 q到 p的标记为 r1,r2,…,rg并行弧用从 q
到 p的、标记为 r1+r2+… +rg的弧取代这 g个并行弧。
2009-7-26 388
4.3.2 RL可以用 RE表示
去状态 1
– 如果从 q到 p有一条标记为 r1的弧,从 p到 t有一条标记为 r2的弧,不存在从状态 p到状态 p的弧,
将状态 p和与之关联的这两条弧去掉,用一条从 q到 t的标记为 r1r2的弧代替。
去状态 2
– 如果从 q到 p有一条标记为 r1的弧,从 p到 t有一条标记为 r2的弧,从状态 p到状态 p标记为 r3的弧,将状态 p和与之关联的这三条弧去掉,用一条从 q到 t的标记为 r1r3*r2的弧代替。
2009-7-26 389
4.3.2 RL可以用 RE表示
去状态 3
– 如果图中只有三个状态,而且不存在从标记为
X的状态到达标记为 Y的状态的路,则将除标记为 X的状态和标记为 Y的状态之外的第 3个状态及其相关的弧全部删除。
2009-7-26 390
4.3.2 RL可以用 RE表示
⑶ 从标记为 X的状态到标记为 Y的状态的弧的标记为所求的正则表达式。如果此弧不存在,则所求的正则表达式为 Φ。
2009-7-26 391
4.3.2 RL可以用 RE表示
例 4-4 求图 4-14所示的 DFA等价的 RE。
2009-7-26 392
4.3.2 RL可以用 RE表示
预处理。
2009-7-26 393
4.3.2 RL可以用 RE表示
去掉状态 q3。
2009-7-26 394
4.3.2 RL可以用 RE表示
去掉状态 q4。
2009-7-26 395
4.3.2 RL可以用 RE表示
合并从标记为 q2的状态到标记为 Y的状态的两条并行弧。
2009-7-26 396
4.3.2 RL可以用 RE表示
去掉状态 q0。
2009-7-26 397
4.3.2 RL可以用 RE表示
并弧。
2009-7-26 398
4.3.2 RL可以用 RE表示
去掉状态 q1。
2009-7-26 399
4.3.2 RL可以用 RE表示
去掉状态 q2。
1*0(11*0)*0((00*111*0+00*10+11*0)(11*0)*0)(00*+00*1)
就是所求。
2009-7-26 400
4.3.2 RL可以用 RE表示
几点值得注意 的问题
⑴ 如果去状态的顺序不一样,则得到的 RE可能在形式是不一样,但它们都是等价的。
⑵ 当 DFA的终止状态都是不可达的时候,状态转移图中必不存在从开始状态到终止状态的路。
此时,相应的 RE为 Φ。
⑶ 不计算自身到自身的弧,如果状态 q的入度为
n,出度为 m,则将状态 q及其相关的弧去掉之后,需要添加 n*m条新弧。
2009-7-26 401
4.3.2 RL可以用 RE表示
⑷ 对操作的步数施归纳,可以证明它的正确性。
推论 4-1 正则表达式与 FA、正则文法等价,是正则语言的表示模型。
2009-7-26 402
4.4 正则语言等价模型的总结
A?aB ~ B∈ δ(A
,a)
A?a ~ qf∈ δ(A,
a)
δ(q,a)=p~
q?ap
δ(q,a)=p∈ F~
q?a
RGG
DF
A
NF
A
RE
ε-NFA
δDFA(P,a)=[δNFA(P,
a)]
δNFA(q,a)
=(q,a)
图上作业法归纳
2009-7-26 403
4.5 小结本章讨论了 RL及其与 FA的等价性。
⑴ 字母表 ∑ 上的 RE用来表示 ∑ 上的 RL。 Φ、
ε,a( a∈∑ ),是 ∑ 上的最基本的 RE,它们分别表示语言 Φ,{ε },{a},以此为基础,
如果 r和 s分别是 ∑ 上的表示语言 R和 S的 RE,
则 r+s,rs,r*分别是 ∑ 上的表示语言 R∪S,
RS,R*的 RE。如果 L(r)=L(s),则称 r与 s等价。
2009-7-26 404
4.5 小结
⑵ RE对乘,加满足结合律;乘对加满足左,
右分配律;加满足交换率和幂等率; Φ是加运算的零元素; ε 是乘运算的单位元;
Φ是乘运算的零元素 。
⑶ RE是 RL的一种描述。容易根据 RE构造出与它等价的 FA。反过来,可以用图上作业法构造出与给定的 DFA等价的 RE。
⑷ RL的 5种等价描述模型转换图。
2009-7-26 405
第 5章 RL的性质
RL性质
– 泵引理及其应用
– 并、乘积、闭包、补、交
– 正则代换、同态、逆同态的封闭性
从 RL固有特征寻求表示的一致性
– Myhill-Nerode定理
– FA的极小化
RL的几个判定问题
– 空否、有穷否、两个 DFA等价否、成员关系
2009-7-26 406
5.1 RL的泵引理
泵引理 (pumping lemma)
设 L为一个 RL,则存在仅依赖于 L的正整数 N,对于?z∈ L,如果 |z|≥N,则存在 u,v、
w,满足
⑴ z=uvw;
⑵ |uv|≤N;
⑶ |v|≥1;
⑷ 对于任意的整数 i≥0,uviw∈ L;
⑸ N不大于接受 L的最小 DFA M的状态数 。
2009-7-26 407
5.1 RL的泵引理
证明思想
2009-7-26 408
5.1 RL的泵引理证明:
DFA在处理一个足够长的句子的过程中,必定会重复地经过某一个状态 。 换句话说,在
DFA的状态转移图中,必定存在一条含有回路的从启动状态到某个终止状态的路 。 由于是回路,所以,DFA可以根据实际需要沿着这个回路循环运行,相当于这个回路中弧上的标记构成的非空子串可以重复任意多次 。
2009-7-26 409
5.1 RL的泵引理
M=(Q,∑,δ,q0,F)
|Q|=N
z= a1a2… am m≥N
δ(q0,a1a2… ah)=qh
状态序列 q0,q1,…,qN中,至少有两个状态是相同,qk=qj
2009-7-26 410
5.1 RL的泵引理
δ(q0,a1a2… ak)=qk
δ(qk,ak+1… aj)=qj=qk
δ(qj,aj+1… am)=qm
对于任意的整数 i≥0
δ(qk,(ak+1… aj)i)
=δ(qk,(ak+1… aj)i-1)
…
=δ(qk,ak+1… aj)=qk
2009-7-26 411
5.1 RL的泵引理故,
δ(q0,a1a2… ak(ak+1… aj)i aj+1… am)=qm
也就是说,
a1a2… ak(ak+1… aj)i aj+1… am∈ L(M)
u= a1a2… ak,
v=ak+1… aj,
w= aj+1… am
uviw∈ L
2009-7-26 412
5.1 RL的泵引理
例 5-1 证明 {0n1n|n≥1}不是 RL。
证明:
假设 L={0n1n|n≥1}是 RL
z=0N1N
按照泵引理所述
v=0k k≥1
此时有,
u=0N-k-j
w=0j1N
2009-7-26 413
5.1 RL的泵引理从而有,
uviw=0N-k-j(0k)i0j1N=0N+(i-1)k1N
当 i=2时,我们有:
uv2w=0N+(2-1)k1N = 0N+k1N
注意到 k≥1,所以,
N+k>N。
这就是说,
0N+k1N?L
这与泵引理矛盾 。 所以,L不是 RL。
2009-7-26 414
5.1 RL的泵引理
例 5-2 证明 {0n|n为素数 }不是 RL。
证明:假设 L={0n|n为素数 }是 RL。
取 z=0N+p ∈ L,
不妨设 v=0k,k≥1
从而有,
uviw=0N+p-k-j(0k)i0j
=0N+p+(i-1)k
2009-7-26 415
5.1 RL的泵引理当 i=N+p+1时,
N+p+(i-1)k=N+p+(N+p+1-1)k
= N+p+(N+p)k
= (N+p)(1+k)
注意到 k≥1,所以
N+p+(N+p+1-1)k=(N+p)(1+k)
不是素数 。 故当 i=N+p+1时,
uvN+p+1w=0(N+p)(1+k)?L
这与泵引理矛盾 。 所以,L不是 RL。
2009-7-26 416
5.1 RL的泵引理
例 5-3 证明 {0n1m2n+m|m,n≥1}不是 RL。
证明:假设 L={0n1m2n+m|m,n≥1} 是 RL。
取 z=0N1N22N
设 v=0k k≥1
从而有,
uviw=0N-k-j(0k)i0j1N22N
=0N+(i-1)k1N22N
2009-7-26 417
5.1 RL的泵引理
uv0w=0N+(0-1)k1N22N
= 0N-k1N22N
注意到 k≥1,
N-k+N=2N-k<2N
0N-k1N22N?L
这个结论与泵引理矛盾。所以,L不是 RL。
2009-7-26 418
5.1 RL的泵引理
用来证明一个语言不是 RL
不能用泵引理去证明一个语言是 RL。
⑴ 由于泵引理给出的是 RL 的必要条件,所以,
在用它证明一个语言不是 RL 时,我们使用反证法。
⑵ 泵引理说的是对 RL 都成立的条件,而我们是要用它证明给定语言不是 RL,这就是说,相应语言的“仅仅依赖于 L的正整数 N”实际上是不存在的。
所以,我们一定是无法给出一个具体的数的。因此,
人们往往就用符号 N来表示这个“假定存在”、而实际并不存在的数。
2009-7-26 419
5.1 RL的泵引理
⑶ 由于泵引理指出,如果 L是 RL,则对任意的 z∈ L,只要 |z|≥N,一定会存在 u,v、
w,使 uviw∈ L对所有的 i成立。因此,我们在选择 z时,就需要注意到论证时的简洁和方便。
⑷ 当一个特意被选来用作“发现矛盾”的 z
确定以后,就必须依照 |uv|≤N和 |v|≥1的要求,
说明 v不存在 (对“存在 u,v,w”的否定 )。
2009-7-26 420
5.1 RL的泵引理
⑸ 与选 z时类似,在寻找 i时,我们也仅需要找到一个表明矛盾的,具体,值就可以了
(对,所有 i”的否定 )。
⑹ 一般地,在证明一个语言不是 RL 的时候,
我们并不使用泵引理的第 (5)条 。
⑺ 事实上,引理所要求的 |uv|≤N并不是必须的 。 这个限制为我们简化相应的证明提供了良好支撑 ——扩充了的泵引理 。
2009-7-26 421
5.2 RL的封闭性
封闭性 (closure property)
如果任意的、属于同一语言类的语言在某一特定运算下所得的结果仍然是该类语言,则称该语言类对此运算是 封闭 的
有效封闭性 (valid closure property)
给定一个语言类的若干个语言的描述,如果存在一个算法,它可以构造出这些语言在给定运算下所获得的运算结果的相应形式的语言描述,则称此语言类对相应的运算是 有效封闭 的。
2009-7-26 422
5.2 RL的封闭性定理 5-1 RL 在并、乘积、闭包运算下是封闭 的。
根据 RE的定义,立即可以得到此定理。
2009-7-26 423
5.2 RL的封闭性定理 5-2 RL 在补运算下是封闭的。
证明,
M=(Q,∑,δ,q0,F) L(M)=L,
取 DFA M′= (Q,∑,δ,q0,Q-F)
显然,对于任意的 x∈ ∑*,
δ(q0,x)=f∈ F? δ(q0,x)=f?Q-F
即,x∈ L(M)? x?L(M′),
L(M′)= ∑*-L(M)。
所以,RL 在补运算下是封闭的。定理得到证明。
2009-7-26 424
5.2 RL的封闭性定理 5-3 RL 在交运算下封闭。
证明 思路
2009-7-26 425
5.2 RL的封闭性
正则代换 (regular substitution)
设 ∑,Δ是两个字母表,映射
*2,f
被称为是从 ∑ 到 Δ 的 代换 。如果对于?a∈∑,
f(a)是 Δ 上的 RL,则称 f为 正则代换。
2009-7-26 426
5.2 RL的封闭性
先将 f的定义域扩展到 ∑ *上:
*2,*f
⑴ f(ε )={ε };
⑵ f(xa)=f(x)f(a)。
2009-7-26 427
5.2 RL的封闭性
再将 f的定义域扩展到 *
2?
** 22,f
对于?L?∑ *
Lx
xfLf
)()(
2009-7-26 428
5.2 RL的封闭性
例 5-4 设 ∑ ={0,1},Δ ={a,b},f(0)=a,f(1)=b*,
则
f(010)=f(0)f(1)f(0)=ab*a
f({11,00})=f(11)∪ f(00)
=f(1)f(1)∪ f(0)f(0)=b*b*+aa=b*+aa
f(L(0*(0+1)1*))=L(a*(a+b*)(b*)*)
=L(a*(a+b*)b*)=L(a*ab*+a*b*b*)
=L(a*b*)
2009-7-26 429
5.2 RL的封闭性
f是正则代换,则
⑴ f(Φ )=Φ;
⑵ f(ε )=ε ;
⑶ 对于?a∈∑,f(a)是 Δ 上的 RE;
⑷ 如果 r,s是 ∑ 上的 RE,则
f(r+s)=f(r)+f(s)
f(rs)=f(r)f(s)
f(r*)=f(r)*
是 Δ 上的 RE。
2009-7-26 430
5.2 RL的封闭性定理 5-4 设 L是 ∑ 上的一个 RL
*2,f
是正则代换,则 f(L)也是 RL。
证明:
描述工具,RE。
对 r中运算符的个数 n施以归纳,证明 f(r)
是表示 f(L)的 RE。
2009-7-26 431
5.2 RL的封闭性
当 n=0时,结论成立。
当 n? k时定理成立,即当 r中运算符的个数不大于 k时,f(L(r)) = L(f?。
当 n=k+1时,
2009-7-26 432
5.2 RL的封闭性
⑴ r=r1+r2。
f(L)=f(L(r))
=f(L(r1+r2))
=f(L(r1)∪ L(r2)) RE的定义
=f(L(r1))∪ f(L(r2)) 正则代换的定义
=L(f(r1))∪ L (f (r2)) 归纳假设
=L(f(r1)+f (r2)) RE的定义
=L(f(r1+r2)) RE的正则代换的定义
=L(f(r))
2009-7-26 433
5.2 RL的封闭性
⑵ r=r1r2。
f(L)=f(L(r))
=f(L(r1r2))
=f(L(r1) L(r2)) RE的定义
=f(L(r1)) f(L(r2)) 正则代换的定义
=L(f(r1)) L (f (r2)) 归纳假设
=L(f(r1) f (r2)) RE的定义
=L(f(r1r2)) RE的正则代换的定义
=L(f(r))
2009-7-26 434
5.2 RL的封闭性
⑶ r=r1*。
f(L)=f(L(r))
=f(L(r1*))
=f(L(r1)*) RE的定义
=(f(L(r1)))* 正则代换的定义
=(L(f(r1)))* 归纳假设
=L(f(r1)*) RE的定义
=L(f(r1*)) RE的正则代换的定义
=L(f(r))
2009-7-26 435
5.2 RL的封闭性
例 5-5设 ∑ ={0,1,2},Δ ={a,b},正则代换 f定义为:
f(0)=ab;
f(1)=b*a*;
f(2)=a*(a+b)
则:
⑴ f(00)=abab;
⑵ f(010)=abb*a*ab=ab+a+b;
2009-7-26 436
5.2 RL的封闭性
⑶ f((0+1+2)*)=(ab+b*a*+ a*(a+b))*
=(b*a*+a*(a+b))*=(a+b)*;
⑷ f(0(0+1+2)*)=ab(ab+b*a*+ a*(a+b))*
=ab(a+b)*;
⑸ f(012)=abb*a* a* (a+b)= ab+a*(a+b);
⑹ f((0+1)*)=(ab+ b*a* )*
=(ab+b+a+ b*a* )*=(a+b)*。
2009-7-26 437
5.2 RL的封闭性
同态映射 (homomorphism)
设 ∑,Δ 是两个字母表,
*,f
f为映射,如果对于?x,y∈∑ *,
f(xy)=f(x)f(y),
则称 f为从 ∑ 到 Δ *的 同态映射。
2009-7-26 438
5.2 RL的封闭性
对于?L?∑ *,L的同态像
Lx
xfLf
)()(
对于?w?Δ *,w的同态原像是一个集合
}&)(|{)( *1 xwxfxwf
对于?L?Δ *,L的同态原像是一个集合
})(|{)(1 LxfxLf
2009-7-26 439
5.2 RL的封闭性
例 5-6设 ∑ ={0,1},Δ ={a,b},同态映射
f定义为
f(0)=aa
f(1)=aba
则:
⑴ f(01)=aaaba;
⑵ f((01)*)=(aaaba)*;
⑶ f -1(aab)=Φ;
2009-7-26 440
5.2 RL的封闭性
⑷ f -1(aa)={0};
⑸ f -1({aaa,aba,abaaaaa,abaaaaaa})
={1,100};
⑹ f -1((ab+ba)*a)={1};
⑺ f(f -1((ab+ba)*a))=f({1})={aba}。
令 L=(ab+ba)*a,上述 (7)表明,f(f -1(L)) ≠ L
f(f -1(L))?L
2009-7-26 441
5.2 RL的封闭性推论 5-1 RL 的同态像是 RL。
证明:
注意到同态映射是正则代换的特例,可以直接的到此结论。
该定理表明,RL 在同态映射下是封闭的。
2009-7-26 442
5.2 RL的封闭性定理 5-5 RL 的同态原像是 RL 。
证明:
使用 DFA作为描述工具。
(1) 接受 RL的同态原像的 FA的构造思想。
让新构造出的 FA M′ 用一个移动去模拟 M处理 f(a)
所用的一系列移动。
对于 ∑ 中的任意字符 a,如果 M从状态 q开始处理
f(a),并且当它处理完 f(a)时到达状态 p,则让 M′ 在状态 q读入 a时,将状态变成 p。
2009-7-26 443
5.2 RL的封闭性
M′ 具有与 M相同的状态,并且,在 M′ 对应的状态转移图中,从状态 q到状态 p有一条标记为 a的弧当且仅当在 M的状态转移图中,有一条从状态 q到状态 p的标记为 f(a)的路。
(2) 接受 RL的同态原像的 FA的形式描述。
设 DFA M=(Q,Δ,δ,q0,F),L(M)=L,
取 DFA M′=(Q,∑,δ ′,q0,F)
δ ′(q,a)= δ (q,f(a))
2009-7-26 444
5.2 RL的封闭性
(3) 等价证明。
施归纳于 |x|,证明对于?x∈∑ *,
δ ′(q0,x)=δ (q0,f(x))
当 |x|=0时,结论显然成立。
设当 |x|=k是结论成立,往证当 |x|=k+1时结论成立。
不妨设 x=ya,其中 |y|=k
2009-7-26 445
5.2 RL的封闭性
δ ′ (q0,x)=δ ′ (q0,ya)
=δ ′ (δ ′ (q0,y),a)
=δ ′ (δ (q0,f(y)),a) 归纳假设
=δ (δ (q0,f(y)),f(a)) δ ′ 的定义
=δ (q0,f(y)f(a)) δ 的意义
=δ (q0,f(ya)) 同态映射性质
=δ (q0,f(x))
2009-7-26 446
5.2 RL的封闭性这表明,结论对 |x|=k+1成立 。 由归纳法原理,结论对?x∈ ∑*成立 。
x∈∑ *,δ ′(q0,x)∈ F? δ (q0,f(x)) ∈ F。
由于对?x∈ ∑*,δ′(q0,x)=δ(q0,f(x)),
所以,
δ′(q0,x)∈ F? δ(q0,f(x))∈ F。
故
L(M′)=f-1(L(M))
定理得证。
2009-7-26 447
5.2 RL的封闭性
商 (quotient)
设 L1,L2?∑ *,L2除以 L1的 商 定义为:
L1/L2={x|?y∈ L2使得 xy∈ L1}。
计算语言的商主要是考虑语言句子的后缀。
只有当 L1的句子的后缀在 L2中时,其相应的前缀才属于 L1/L2。所以,当 ε ∈ L2时,
L1? L1/L2。
2009-7-26 448
5.2 RL的封闭性
注意以下有意思的情况:
取 L1={000},L2={ε },L3={ε,0}
L4={ε,0,00},L5={ε,0,00,000}
L1/L2={000}= L1
L1/L3={000,00}
L1/L4={000,00,0}
L1/L5={000,00,0,ε }
2009-7-26 449
5.2 RL的封闭性定理 5-6 L1,L2?∑ *,如果 L1是 RL,则
L1/L2也是 RL 。
证明:设 L1?∑ *,是 RL,
DFA M=(Q,∑,δ,q0,F),L(M)=L1
DFA M′ =(Q,∑,δ,q0,F′ )
F′ ={q|?y∈ L2,δ (q,y)∈ F}
显然,
L(M′ )= L1/L2。
定理得证。
2009-7-26 450
5.3 Myhill-Nerode 定理与 DFA的极小化
对给定 RL L,DFA M接受 L,M不同,由 RM
确定的 ∑ *上的 等价类也可能不同。
如果 M是最小 DFA,则 M所给出的等价类的个数应该是最少的。
最小 DFA是不是惟一的?如果是,如何构造?
最小 DFA的状态对应的集合与其他 DFA的状态对应的集合有什么样的关系,用这种关系是否能从一般的 DFA出发,求出最小 DFA?
2009-7-26 451
5.3.1 Myhill-Nerode 定理
DFA M确定的等价关系。
M=(Q,∑,δ,q0,F),对于?x,y∈∑ *
x RM y?δ (q0,x)=δ (q0,y)。
显然,
x RM yq∈ Q,x,y∈ set(q)
2009-7-26 452
5.3.1 Myhill-Nerode 定理
例 5-8 设 L=0*10*,它对应的 DFA M如下图。
2009-7-26 453
5.3.1 Myhill-Nerode 定理对应于 q0,(00)n RM (00)m n,m? 0;
对应于 q1,0(00)n RM 0(00)m n,m? 0;
对应于 q2,(00)n1RM (00)m1 n,m? 0;
对应于 q3,0(00)n 1RM 0(00)m1 n,m? 0;
对应于 q4,0(00)n 10kRM 0(00)m10h n,
m? 0,k,h? 1;
(00)n10k RM (00)m10h n,m? 0,k,h? 1;
0(00)n 10kRM (00)m10h n,m? 0,k,h? 1;
也就是,0n 10kRM 0m10h n,m? 0,k,h? 1;
对应于 q5,x RM y——x,y为至少含两个 1的串。
2009-7-26 454
5.3.1 Myhill-Nerode 定理
L确定的 ∑ *上的关系 RL。
对于?x,y∈∑ *,
x RL y? (对?z∈∑ *,xz∈ L? zy∈ L)
对于?x,y∈∑ *,如果 x RL y,则在 x和 y后无论接 ∑ *中的任何串 z,xz和 yz要么都是 L
的句子,要么都不是 L的句子。
2009-7-26 455
5.3.1 Myhill-Nerode 定理任意 x,y∈ set(q),δ (q0,x)=δ (q0,y)=q
对于?z∈∑ *,
δ (q0,xz)=δ (δ (q0,x),z))
=δ (q,z)
=δ (δ (q0,y),z)
=δ (q0,yz)
这就是说,
δ (q0,xz)∈ F?δ (q0,yz)∈ F
2009-7-26 456
5.3.1 Myhill-Nerode 定理即,对于?z∈∑ *,
xz∈ L? yz∈ L。
表明,
x RL y,
也就是
x RL(M)y。
2009-7-26 457
5.3.1 Myhill-Nerode 定理
右不变的 (right lnvariant)等价关系设 R是 ∑ *上的等价关系,对于?x,
y∈∑ *,如果 x RL y,则必有 xz RL yz对于?z∈∑ *成立,则称 R是 右不变的 等价关系 。
2009-7-26 458
5.3.1 Myhill-Nerode 定理命题 5-1 对于任意 DFA M=(Q,∑,δ,q0,F),
M所确定的 ∑ *上的关系 RM为右不变的等价关系。
证明:
⑴ RM是等价关系 。
自反性显然 。
对称性,?x,y∈∑ *,
x RM y?δ (q0,x)=δ (q0,y) 根据 RM的定义;
δ (q0,y)=δ (q0,z),=”的对称性;
y RM x 根据 RM的定义。
2009-7-26 459
5.3.1 Myhill-Nerode 定理传递性:设 x RM y,y RM z。
由于 x RM y,δ (q0,x)=δ (q0,y)
由于 y RM z,δ (q0,y)=δ (q0,z)
由,=”的传递性知,
δ (q0,x)=δ (q0,z)
再由 RM的定义得:
x RM z
即 RM是等价关系。
2009-7-26 460
5.3.1 Myhill-Nerode 定理
⑵ RM 是右不变的设 x RM y。 则 δ (q0,x)=δ (q0,y)=q
所以,对于?z∈∑ *,
δ (q0,xz)=δ (δ (q0,x),z))
=δ (q,z)
=δ (δ (q0,y),z)
=δ (q0,yz)
这就是说,δ (q0,xz)=δ (q0,yz),再由 RM的定义,
xz RM yz
所以,RM 是右不变的等价关系。
2009-7-26 461
5.3.1 Myhill-Nerode 定理命题 5-2 对于任意 L?∑ *,L所确定的 ∑ *上的关系 RL为右不变的等价关系 。
证明:
⑴ RL是等价关系。
自反性显然 。
对称性:不难看出,x RL y? (对?z∈∑ *,
xz∈ L? yz∈ L)? y RL x
2009-7-26 462
5.3.1 Myhill-Nerode 定理传递性:设 x RL y,y RL z。
x RL y? (对?w∈∑ *,xw∈ L? yw∈ L)
y RL z? (对?w∈∑ *,yw∈ L? zw∈ L)
所以,
(?w∈∑ *,xw∈ L? yw∈ L 且 yw∈ L? zw∈ L)
即:
(对?w∈∑ *,xw∈ L? zw∈ L)
故:
x RL z
即 RL是等价关系。
2009-7-26 463
5.3.1 Myhill-Nerode 定理
⑵ RL 是右不变的。
设 x RL y。 由 RL的定义,对?w,v∈∑ *,
xwv∈ L? zwv∈ L,注意到 v的任意性,知,
xw RL yw。
所以,RL是右不变的等价关系。
2009-7-26 464
5.3.1 Myhill-Nerode 定理
指数 (index)
设 R是 ∑ *上的等价关系,则称 |∑ */R|是 R关于 ∑ *的 指数 。简称为 R的指数。简称 ∑ *的关于 R的一个等价类,也就是 ∑ */R的任意一个元素,为 R的一个等价类
2009-7-26 465
5.3.1 Myhill-Nerode 定理
例 5-9 图 5-4 所给 DFA M所确定的 RM的指数为 6。 RM将 ∑ *分成 6个等价类:
set(q0)={(00)n | n? 0};
set(q1)={0(00)n| n? 0};
set(q2)={(00)n1| n,m? 0};
set(q3)={0(00)n1|n? 0};
set(q4)={0n 10k|n? 0,k? 1};
set(q5)={x|x为至少含两个 1的串 }。
2009-7-26 466
5.3.1 Myhill-Nerode 定理
RM是 RL(M)的,加细,(refinement)
–?x,y∈∑ *,如果 x RM y,必有 x RL(M) y成立。
即对于任意 DFA M=(Q,∑,δ,q0,F)。
|∑ */RL(M)|? |∑ */RM|? |Q|
– 按照 RM中被分在同一等价类的串,在按照 RL(M)
分类时,一定会被分在同一个等价类。
– RM对 ∑ *的划分比 RL(M)对 ∑ *的划分更,细,。
称 RM是 RL(M)的,加细,(refinement)。
2009-7-26 467
5.3.1 Myhill-Nerode 定理
∑ */RM ={set(q0),set(q1),set(q2),set(q3),
set(q4),set(q5)}
⑴ 取 00∈ set(q0),000∈ set(q1)。
对于 任意的 x∈∑ *,当 x含且只含一个 1时,
00x∈ L(M),000x∈ L(M);当 x不含 1或者含多个 1时,00x?L(M),000x?L(M)。这就是说,
对于任意的 x∈∑ *,00x∈ L(M)? 000x∈ L(M)。
即按照 RL(M),00与 000被分在同一个等价类中。
从而 set(q0)和 set(q1) 被包含在 RL(M)的同一个等价类中。
2009-7-26 468
5.3.1 Myhill-Nerode 定理
⑵ 取 00∈ set(q0),001∈ set(q2)。
取 特殊的 字符串 1∈∑ *,001∈ L(M),但
0011?L(M)。 所以,根据 RL(M),set(q0)和
set(q2)不能被,合并,到一个等价类中 。
类似地,根据 RL(M),set(q3),set(q4),set(q5)
也都不能被,合并,到 set(q0)的句子所在的等价类中。
2009-7-26 469
5.3.1 Myhill-Nerode 定理
⑶ 取 001∈ set(q2),01∈ set(q3)。
对于 任意的 x∈∑ *,x要么不含 1,要么含有 1。
当 x不含 1时,001x∈ L(M),01x∈ L(M);
当 x含有 1时,001x?L(M),01x?L(M)。这就是说,对于任意的 x∈∑ *,001x∈ L(M)
01x∈ L(M)。即按照 RL(M),001与 01属于
RL(M)的同一个等价类中。从而 set(q2)和
set(q3) 被包含在 RL(M)的同一个等价类中。
2009-7-26 470
5.3.1 Myhill-Nerode 定理
⑷ 取 1∈ set(q2),10∈ set(q4)。
对于 任意的 x∈∑ *,x要么不含 1,要么含有 1。
当 x不含 1时,1x∈ L(M),10x∈ L(M);当 x
含有 1时,1x?L(M),10x?L(M)。这就是说,对于任意的 x∈∑ *,1x∈ L(M)?
10x∈ L(M)。即按照 RL(M),1与 10被分在
RL(M)的同一个等价类中。从而在 set(q2)和
set(q4)被包含在 RL(M)的同一个等价类中。
2009-7-26 471
5.3.1 Myhill-Nerode 定理
⑸ 取 1∈ set(q2),11∈ set(q5)。
注意到 1ε =1,11ε =11;而 1∈ L(M),
11?L(M)。即 1和 11不满足关系 RL(M),所以,set(q2)和 set(q5)不能被,合并,到 RL(M)
的同一个等价类中。在这里,ε ∈∑ *是一个 特殊的 字符串。
2009-7-26 472
5.3.1 Myhill-Nerode 定理
∑ */RL(M)={ set(q0)∪ set(q1),
set(q2)∪ set(q3)∪ set(q4),set(q5)}
不含 1,[0]= set(q0)∪ set(q1)=0*;
含一个 1,[1]= set(q2)∪ set(q3)∪ set(q4)=0*10*;
含多个 1,[11]= set(q5)=0*10*1(0+1)* 。
2009-7-26 473
5.3.1 Myhill-Nerode 定理定理 5-1 (Myhill-Nerode定理 )如下三个命题等价:
⑴ L?∑ *是 RL ;
⑵ L是 ∑ *上的某一个具有有穷指数的右不变等价关系 R的某些等价类的并;
⑶ RL具有有穷指数 。
2009-7-26 474
5.3.1 Myhill-Nerode 定理证明:
由 (1)可以推出 (2)
设 L?∑ *是 RL,所以,存在 DFA M=(Q,∑,δ,
q0,F),使得 L(M)=L。由命题 5-3-1,RM是 ∑ *上的右不变等价关系,而且 |∑ */RM|? |Q|,所以,
RM具有有穷指数。而
Fq
qse tL
)(
L是 ∑ *上的具有有穷指数的右不变等价关系 RM的、
对应于 M的终止状态的等价类的并。
2009-7-26 475
5.3.1 Myhill-Nerode 定理
由 (2)可以推出 (3)。
设 x R y,由 R的右不变性可知,对于任意 z∈∑ *,
xz R yz
而 L是 R的某些等价类的并,所以,
xz∈ L? yz∈ L
根据 RL的定义,
x RL y
故 R是 RL的加细。由于 R具有有穷指数,所以,RL
具有有穷指。
2009-7-26 476
5.3.1 Myhill-Nerode 定理
由 (3)可以推出 (1)。
令 M′ =(∑ */RL,∑,δ ′,[ε ],{[x]|x∈ L})
[ε ]表示 ε 所在的等价类对应的状态;
[x] 表示 x所在的等价类对应的状态 。
对于?([x],a)∈ (∑ */RL)× ∑,δ ′ ([x],a)=[xa]
δ ′ 定义的相容性
L(M′ )=L
2009-7-26 477
5.3.1 Myhill-Nerode 定理
例 5-10用定理 5-7证明 {0n1n|n? 0}不是 RL
– 根据 L的句子的特征来寻找 RL的等价类 。
– L的句子的主要特点有两个:
⑴ 句子中所含的字符 0的个数与所含的字符 1的个数相同 。
⑵ 所有的 0都在所有的 1的前面
– 可以得到如下一些等价类 。
2009-7-26 478
5.3.1 Myhill-Nerode 定理
[10]={x|x=0n1m(m? n+1)或者 x中含子串 10}
[ε]——ε所在的等价类;
[1]——0所在的等价类;
[2]——00所在的等价类;
[3]——000所在的等价类;
…
[n]——0n所在的等价类;
…
所以,RL的指数是无穷的。因此,L不是 RL。
2009-7-26 479
5.3.1 Myhill-Nerode 定理推论 5-1 对于任意的 RL L,如果 DFA M=(Q,
∑,δ,q0,F)满足 L(M)=L,则
|∑ */RL|? |Q|。
表明,对于任意 DFA M=(Q,∑,δ,q0,
F),|Q|? |∑ */RL(M)|。
也表明,对任意一个 RL L,按照定理中所给的方法构造出来的 DFA M′ 是一个接受
L的最小 DFA。这个 DFA是惟一的么?
2009-7-26 480
5.3.1 Myhill-Nerode 定理推论 5-2对于任意的 RL L,在同构意义下,接受 L的最小 DFA是惟一的。
证明:
接受 L的最小 DFA M=(Q,∑,δ,q0,F)的状态数与 RL的指数相同,也就是说,这个最小 DFA的状态数与 Myhill-Nerode定理证明中构造的 M′=(∑ */RL,∑,δ ′,[ε ],
{[x]|x∈L}) 的状态数是相同的。
2009-7-26 481
5.3.1 Myhill-Nerode 定理
DFA同构是指这两个 DFA的状态之间有一个一一对应,而且这个一一对应还保持状态转移也是相应一一对应的。也就是说,
如果 q与 [w]对应,p与 [z]对应,当 δ (q,
a)=p时,必定有 δ ([w],a)=[z]。
这两个 DFA是同构。定义映射 f
f(q)=f(δ (q0,x))= δ ′ ([ε ],x)=[x]
δ (q0,x)=q
2009-7-26 482
5.3.1 Myhill-Nerode 定理
f为 Q与 ∑ */RL之间的一一对应
– 如果 δ (q0,x)=δ (q0,y),则 x RM y
– 由于 RM是 RL的加细,所以,x RL y
– 故,[x]=[y],即,δ ′ ([ε ],x)=δ ′ ([ε ],y)。
– 如果,δ (q0,x)≠ δ (q0,y)
– 则,δ ′ ([ε ],x)≠ δ ′ ([ε ],y)
– 即,[x]≠ [y]
– 否则,|∑ */RM |>|∑ */RL |。
2009-7-26 483
5.3.1 Myhill-Nerode 定理
如果 δ (q,a)=p,f(q)= [x],必有 f(p)=[xa]
–? q∈ Q,如果,f(q)=f(δ (q0,x))=[x]
– 所以,? a∈∑,如果,
– p=δ (q,a)=δ (δ (q0,x),a)=δ (q0,xa)
– 则 f(p)=f(δ (q,a))= f(δ (δ (q0,x),
a))=f(δ (q0,xa))=[xa]
– 即,如果 M在状态 q读入字符 a时进入状态 p,
则 M在 q对应的状态 f(δ (q0,x))=[x]读入字符 a
时,进入 p对应的状态 f(δ (q0,xa) )=[xa]。 所以,f是 M和 M′ 之间的同构映射 。
2009-7-26 484
5.3.2 DFA的极小化
可以区分的 (distinguishable)状态
设 DFA M=(Q,∑,δ,q0,F),如果
x∈∑ *,对 Q中的两个状态 q和 p,使得
δ (q,x)∈ F 和 δ (p,x)∈ F中,有且仅有一个成立,则称 p和 q是 可以区分的 。否则,
称 q和 p等价。并记作 q≡ p 。
2009-7-26 485
5.3.2 DFA的极小化算法 5-1 DFA的极小化算法
算法思想:扫描所有的状态对,找出所有的可区分的状态对,不可取分的状态对一定是等价的 。
输入:给定的 DFA。
输出:可区分状态表 。
主要数据结构:状态对的关联链表;可区分状态表。
2009-7-26 486
5.3.2 DFA的极小化
主要步骤
⑴ for?(q,p)∈ F× (Q-F) do
标记可区分状态表中的表项 (q,p);
⑵ for?(q,p)∈ F× F∪ (Q-F)× (Q-F)&q≠ p do
⑶ if?a∈∑,可区分状态表中的表项 (δ (q,a),δ (p,a))
已被标记 then
begin
⑷ 标记可区分状态表中的表项 (q,p);
⑸ 递归地标记本次被标记的状态对的关联链表上的各个状态对在可区分状态表中的对应表项
end
2009-7-26 487
5.3.2 DFA的极小化
⑹ else for? a∈∑,do
⑺ if δ (q,a)≠ δ (p,a) &(q,p)与 (δ (q,
a),δ (p,a))不是同一个状态对 then
将 (q,p)放在 (δ (q,a),δ (p,a))
的关联链表上。
2009-7-26 488
5.3.2 DFA的极小化定理 5-8对于任意 DFA M=(Q,∑,δ,q0,
F),Q中的两个状态 q和 p是可区分的充要条件是 (q,p)在 DFA的极小化算法中被标记。
证明:
先证必要性。
设 q和 p是可区分的,x是区分 q和 p的最短字符串。
现施归纳于 x的长度,证明 (q,p)一定被算法标记。
2009-7-26 489
5.3.2 DFA的极小化
当 |x|=0时
ε 区分 q和 p,表明 q和 p有且仅有一个为 M的终止状态,所以,
(q,p)∈ F× (Q-F)
因此,它在算法的第 (1)行被标记。
设当 |x|=n时结论成立
x是区分 q和 p的长度为 n的字符串,则 (q,p)
被算法标记。
2009-7-26 490
5.3.2 DFA的极小化
当 |x|=n+1时设 x=ay,其中 |y|=n。 由于 x是区分 q和 p的最短的字符串,所以,δ (q,x)∈ F 和 δ (p,
x)∈ F中,有且仅有一个成立 。 不妨假设:
δ (q,x)?F,δ (p,x)∈ F
即 δ (δ (q,a),y)?F,δ (δ (p,a),y)∈ F
设 δ (q,a)=u,δ (p,a)=v
y是区分 u和 v的长度为 n的字符串 。
2009-7-26 491
5.3.2 DFA的极小化由归纳假设,(u,v)可以被算法标记 。
如果在考察 (q,p)时,(u,v)已经被标记,
则 (q,p)在算法的第 (4)行被标记;
如果在考察 (q,p)时,(u,v)还没有被标记,
则 (q,p)在算法的第 (7)行被放入到 (u,v)的关联链表中,而当 (u,v)被标记时,在算法的第 (5)行在,递归,过程中 (q,p)被标记。
结论对 |x|=n+1成立。
2009-7-26 492
5.3.2 DFA的极小化
充分性。
设 (q,p)在算法中被标记。对它被标记的顺序 n施归纳,证明 q和 p是可区分的。
令 |F× (Q-F)|=m,显然,当 1? n? m时,(q,
p)是在算法的第 (1)行被标记的,此时,ε
是区分 q和 p的字符串:
δ (q,ε )∈ F和 δ (p,ε )∈ F
有且仅有一个成立。
2009-7-26 493
5.3.2 DFA的极小化
设 n? k(k? m)时结论成立 。 即,如果 (q,p)是被算法在第 k个或者第 k个之前标记的,则存在字符串 x,x区分 q和 p。 即,δ (q,x)∈ F 和 δ (p,
x)∈ F有且仅有一个成立 。
当 n=k+1时,如果 (q,p)是在算法的第 (4)行被标记的,此时,(δ (q,a),δ (p,a))一定是在第 k
个之前被标记的 。 设 δ (q,a)=u,δ (p,a)=v,
由归纳假设,存在字符串 x,x区分 u和 v:
δ (u,x)∈ F 和 δ (v,x)∈ F
有且仅有一个成立,从而,
δ (q,ax)∈ F 和 δ (p,ax)∈ F
有且仅有一个成立 。 即,ax是区分 q和 p的字符串 。
2009-7-26 494
5.3.2 DFA的极小化
如果 (q,p)是在算法的第 (5)行被标记的,
则它必在某个状态对 (u,v)的关联链表中,
而 (u,v)必在 (q,p)之前被标记 。 由归纳假设,存在 x区分 (u,v);
存在 a∈∑,δ (q,a)=u,δ (p,a)=v使得
(q,p)被放在 (u,v)的关联链表中; ax是区分 q和 p的字符串 。
所以,结论对 n=k+1成立。由归纳法原理,
结论对所有的 n成立。
2009-7-26 495
5.3.2 DFA的极小化定理 5-9 由算法 5-1构造的 DFA在去掉不可达状态是最小 DFA 。
证明:
设 M=(Q,∑,δ,q0,F)为算法 5-1的输入 DFA,
M′ =(Q/≡,∑,δ ′,[q0],F′ )是相应的输出 DFA。 F′ ={[q]|q∈ F}。
对于?[q]∈ Q/≡,?a∈∑,定义
δ ′ ([q],a)=[δ (q,a)]
2009-7-26 496
5.3.2 DFA的极小化
δ ′ 的相容性。
– 设 [q]=[p],也就是说,q和 p等价,q≡ p。即根据算法 5-1,状态 q和 p是不可区分的 (未被算法标记 )。此时,对于?a∈∑,必须有 [δ (q,
a)]≡ [δ (p,a)]。否则,状态对 (δ (q,a),
δ (p,a))必定被算法标记,从而最终导致 (q,
p)被算法标记。此与 q≡ p矛盾。所以,状态
[δ (q,a)]和状态 [δ (p,a)] 等价,δ (q,
a)=δ (p,a)。所以,δ ′ 的定义是相容的。
2009-7-26 497
5.3.2 DFA的极小化
L(M′ )=L(M)。
– 对?x∈∑ *,现施归纳于 |x|,证明 δ ′ ([q0],x)=[δ (q0,x)]
– |x|=0
δ ′ ([q0],ε )=[q0]=[δ (q0,ε )]
–?x∈∑ *并且 |x|=n,
δ ′ ([q0],xa)=δ ′ (δ ′ ([q0],x),a)
=δ ′ ([δ (q0,x)],a)
=[δ ([δ (q0,x)],a)]
=[δ (q0,xa)]
– 由归纳法原理,结论对?x∈∑ *成立。
2009-7-26 498
5.3.2 DFA的极小化
再由 F′ 的定义,
δ ′ ([q0],x)=[δ (q0,x)]∈ F′? δ (q0,
x)∈ F。
所以,
x∈ L(M′ )? x∈ L(M)。
即:
L(M′ )=L(M)。
2009-7-26 499
5.3.2 DFA的极小化
证明所构造的 M′去掉不可达状态后是最小
DFA。
– 如果 [q]≠ [p],则对于?x∈ set([q]),
y∈ set([p]),x RL y不成立。事实上,如果
[q]≠ [p],则存在 z∈∑ *,z区分 q和 p,有 δ (q,
z)=q′ 和 δ (p,z)= p′有且仅有一个是终止状态,
这就是说,xz和 yz有且仅有一个是 L的句子。
所以,x RL y是不成立的。
2009-7-26 500
5.3.2 DFA的极小化
例 5-11用算法 5-1对图 5-4所给的 DFA进行极小化。
q1
q2 × ×
q3 × ×
q4 × ×
q5 × × × × ×
q0 q1 q2 q3 q4
2009-7-26 501
5.3.2 DFA的极小化
2009-7-26 502
5.3.2 DFA的极小化
例 5-11用算法 5-1对图 5-7所给的 DFA进行极小化。
2009-7-26 503
5.3.2 DFA的极小化
q1 ×
q2 × ×
q3 × × ×
q4 × × × ×
q5 × × × × ×
q6 × × × × × ×
q7 × × × × × × ×
q8 × × × × × × × ×
q0 q1 q2 q3 q4 q5 q6 q7
2009-7-26 504
5.4 关于正则语言的判定算法定理 5-10 设 DFA M=(Q,∑,δ,q0,F),
L=L(M)非空的充分必要条件是:存在
x∈∑ *,|x|<|Q|,δ (q0,x)∈ F。
证明:充分性显然。
必要性,M的状态转移图中必存在一条从 q0
到某一个终止状态 qf且无 重复状态的路,此路中的状态数 n? |Q|。此路的标记 x满足
|x|? n-1。而 δ (q0,x)∈ F。即 x是 L=L(M)
的长度小于 |Q|的句子。
2009-7-26 505
5.4 关于正则语言的判定算法定理 5-11设 DFA M=(Q,∑,δ,q0,F),
L=L(M)为无穷的充分必要条件是:存在
x∈∑ *,|Q|? |x|<2|Q|,δ (q0,x)∈ F。
算法通过判定是否存在 x∈∑ *,
|Q|? |x|<2|Q|,δ (q0,x)∈ F即可。
2009-7-26 506
5.4 关于正则语言的判定算法定理 5-12 设 DFA M1=(Q1,∑,δ 1,q01,
F1),DFA M2=(Q2,∑,δ 2,q02,F2),
则存在判定 M1与 M2是否等价的算法。
通过判定两个 DFA的极小 DFA是否同构就可以判定它们是否等价。
2009-7-26 507
5.4 关于正则语言的判定算法定理 5-13 设 L是字母表 ∑ 上的 RL,对任意
x∈∑ *,存在判定 x是不是 L的句子的算法。
从一定的意义上讲,接受 L的 DFA M就是判定 x是否 L的一个桔子的“算法”。
2009-7-26 508
5.5 小结本章讨论了 RL的性质 。 包括,RL 的泵引理,RL 关于并,乘积,闭包,补,交,
正则代换,同态,逆同态等运算的封闭性 。
Myhill-Nerode定理与 FA的极小化 。
⑴ 泵引理。泵引理是用 RL的必要条件来用来证明一个语言不是 RL 的。它不能用来证明一个语言是 RL,而且是采用反证法。
2009-7-26 509
5.5 小结
⑵ RL 对有关运算的封闭性 。 RL 在并,乘,
闭包,补,交,正则代换,同态映射运算下是有效封闭的 。 RL 的同态原像是 RL 。
⑶ 设 L1,L2?∑ *,如果 L1是 RL,则 L1/L2
也是 RL 。
2009-7-26 510
5.5 小结
⑷ 如果 L是 RL,则根据 RL确定的 ∑ *的等价类可以构造出接受 L的最小 DFA。 更方便的方法是通过确定给定 DFA状态的可区分性构造出等价的最小 DFA。
⑸ 存在判定 L(M)是非空,M1与 M2是否等价,
L(M)是否无穷,x是不是 RL L的句子的算法 。
2009-7-26 511
第 6章 上下文无关语言
Gbra,S?S(S)|ε
L(Gbra)不是 RL,是 CFL
hh nnnnnn 10......1010 221`1
高级程序设计语言的绝大多数语法结构都可以用上下文无关文法 (CFG)描述。。
BNF(巴科斯范式,Backus normal form,
又叫 Backus-naur form)。
2009-7-26 512
第 6章 上下文无关语言
主要内容
– 关于 CFL的分析
派生和归约,派生树
– CFG的化简
无用符,单一产生式,空产生式
– CFG的范式
CNF
GNF
– CFG的自嵌套特性
2009-7-26 513
第 6章 上下文无关语言
重点
– CFG的化简 。
– CFG到 GNF的转换 。
难点
– CFG到 GNF的转换,特别是其中的用右递归替换左递归的问题。
2009-7-26 514
6.1 上下文无关语言
文法 G=(V,T,P,S)被称为是上下文无关的。 如果除了形如 A?ε 的产生式之外,
对于?α?β ∈ P,均有 |β |? |α |,并且
α ∈ V成立。
关键:对于?A∈ V,如果 A?β ∈ P,则无论 A出现在句型的任何位置,我们都可以将
A替换成 β,而不考虑 A的上下文。
2009-7-26 515
6.1.1 上下文无关文法的派生树
算术表达式的文法
Gexp1,E?E+T|E-T|T
T?T*F|T/F|F
F?F↑ P|P
P?(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
2009-7-26 516
6.1.1 上下文无关文法的派生树
算术表达式 x+x/y↑2 的不同派生
E?E+T?T+T?F+T?P+T?x+T?x+T/F?x+F/F
x+P/F?x+x/F?x+x/F↑ P?x+x/P↑ P?x+x/y↑ P
x+x/y↑ 2
E?E+T?E+T/F?E+T/F↑P?E+T/F↑2?E+T/P↑2
E+T/y↑2?E+F/y↑2? E+P/y↑2?E+x/y↑2
T+x/y↑2? F+x/y↑2? P+x/y↑2?x+x/y↑ 2
E?E+T?T+T?T+T/F?F+T/F?F+T/F↑P
P+T/F↑P?x+T/F↑P?x+F/F↑P?x+F/F↑2
x+F/P↑2?x+P/P↑2?x+P/y↑2?x+x/y↑ 2
2009-7-26 517
6.1.1 上下文无关文法的派生树
文法 Gexp1句子 x+x/y↑2 的结构。
2009-7-26 518
6.1.1 上下文无关文法的派生树
派生树 (derivation tree)
– 一棵 (有序 )树 (ordered tree)
– 树的每个顶点有一个标记 X,且 X∈ V∪ T∪ {ε }
– 树根的标记为 S;
– 如果非叶子顶点 v标记为 A,v的儿子从左到右依次为 v1,v2,…,vn,并且它们分别标记为
X1,X2,…,Xn,则 A?X1X2… Xn∈ P;
– 如果 X是一个非叶子顶点的标记,则 X∈ V;
– 如果顶点 v标记为 ε,则 v是该树的叶子,并且
v是其父顶点的惟一儿子。
2009-7-26 519
6.1.1 上下文无关文法的派生树
别称
– 生成树
– 分析树 (parse tree)
– 语法树 (syntax tree)
顺序
– v1,v2是派生树 T的两个不同顶点,如果存在顶点 v,v至少有两个儿子,使得 v1是 v的较左儿子的后代,v2是 v的较右儿子的后代,则称顶点 v1
在顶点 v2的左边,顶点 v2在顶点 v1的右边。
2009-7-26 520
6.1.1 上下文无关文法的派生树
结果 (yield)
派生树 T的所有叶子顶点从左到右依次标记为 X1,X2,…,Xn,则称符号串 X1X2… Xn
是 T的 结果。
一个文法可以有多棵派生树,它们可以有不同的结果。
句型 α的派生树:,G的结果为 α 的派生树,。
2009-7-26 521
6.1.1 上下文无关文法的派生树
派生子树 (subtree)
满足派生树定义中除了对跟结点的标记的要求以外各条的树叫 派生子树 (subtree)。
如果这个子树的根标记为 A,则称之为 A子树。
惟一差别是根结点可以标记非开始符号。
2009-7-26 522
6.1.1 上下文无关文法的派生树定理 6-1设 CFG G=(V,T,P,S),S?*α 的充分必要条件为 G有一棵结果为 α 的派生树 。
证明:
证一个更为一般的结论:对于任意 A∈ V,
A?*α 的充分必要条件为 G有一棵结果为 α 的 A-
子树。
充分性:设 G有一棵结果为 α 的 A-子树,非叶子顶点的个数 n施归纳,证明 A?*α 成立。
2009-7-26 523
6.1.1 上下文无关文法的派生树
设 A-子树有 k+1个非叶子顶点,根顶点 A的儿子从左到右依次为 v1,v2,…,vm,并且它们分别标记为 X1,X2,…,Xm 。
A?X1X2… Xm∈ P 。
以 X1,X2,…,Xm为根的子树的结果依次为 α 1,α 2,…,α m 。
X1,X2,…,Xm为根的子树的非叶子顶点的个数均不大于 k。
2009-7-26 524
6.1.1 上下文无关文法的派生树
X1?*α 1
X2?*α 2
…
Xm?*α m
而且
α =α 1α 2… α m
2009-7-26 525
6.1.1 上下文无关文法的派生树
A?X1X2… Xm
*α 1X2… Xm
*α 1α 2… Xm
…
*α 1α 2… α m
2009-7-26 526
6.1.1 上下文无关文法的派生树
2009-7-26 527
6.1.1 上下文无关文法的派生树
必要性
– 设 A?nα,现施归纳于派生步数 n,证明存在结果为 α
的 A-子树。
设 n≤k(k≥1)时结论成立,往证当 n=k+1时结论也成立:令
A?k+1α,则有:
A?X1X2… Xm
*α1X2… Xm
*α1α2… Xm
…
*α 1α 2… α m
2009-7-26 528
6.1.1 上下文无关文法的派生树
2009-7-26 529
6.1.1 上下文无关文法的派生树
例 6-1设 Gbra,S?S(S)|ε,(()(()))和 (S)((S))
的派生树。
2009-7-26 530
6.1.1 上下文无关文法的派生树
关于标记 ε 的结点
2009-7-26 531
6.1.1 上下文无关文法的派生树
最左派生 (leftmost derivation)
– α 的派生过程中,每一步都是对当前句型的最左变量进行替换。
左句型 (left sentencial form)
– 最左派生得到的句型可叫做左句型。
最右归约 (rightmost reduction)
– 与最左派生对相的归约叫做最有归约。
2009-7-26 532
6.1.1 上下文无关文法的派生树
最右派生 (rightmost derivation)
– α 的派生过程中,每一步都是对当前句型的最右变量进行替换。
右句型 (right sentencial form)
– 最右派生得到的句型可叫做右句型。
最左归约 (leftmost reduction)
– 与最左派生对相的归约叫做最右归约。
2009-7-26 533
6.1.1 上下文无关文法的派生树
规范派生 (normal derivation)
– 最右派生。
规范句型 (normal sentencial form)
– 规范派生产生的句型。
规范归约 (normal reduction)
– 最左归约。
2009-7-26 534
6.1.1 上下文无关文法的派生树定理 6-2如果 α 是 CFG G的一个句型,则 G中存在 α 的最左派生和最右派生。
证明:
基本思路,对派生的步数 n施归纳,证明对于任意 A∈ V,如果 A?nα,在 G中,存在对应的从 A到 α 的最左派生,A?n左 α 。
2009-7-26 535
6.1.1 上下文无关文法的派生树
A?X1X2… Xm
*α 1X2… Xm
*α 1α 2… Xm
…
*α 1α 2… α m
A?左 X1X2… Xm
*左 α1X2… Xm
*左 α1α2… Xm
…
*左 α 1α 2… α m
同理可证,句型 α 有最右派生。
2009-7-26 536
6.1.1 上下文无关文法的派生树定理 6-3 如果 α 是 CFG G的一个句型,α 的派生树与最左派生和最右派生是一一对应的,但是,这棵派生树可以对应多个不同的派生。
2009-7-26 537
6.1.2 二义性
简单算术表达式的二义性文法
Gexp2,E?E+E|E-E|E/E|E*E
E?E↑E|(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
2009-7-26 538
6.1.2 二义性
E? E+E
x+E
x+E/E
x+x/E
x+x/E↑E
x+x/y↑E
x+x/y↑ 2
句子 x+x/y↑ 2在文法中的三个不同的最左派生
E? E/E
E+E/E
x+E/E
x+x/E
x+x/E↑E
x+x/y↑E
x+x/y↑ 2
E? E↑ E
E/E↑ E
E+E/E↑ E
x+E/E↑ E
x+x/E↑ E
x+x/y↑ E
x+x/y↑ 2
2009-7-26 539
6.1.2
二义性对应 3
个不同的语法树
2009-7-26 540
6.1.2 二义性
二义性 (ambiguity)
CFG G=(V,T,P,S),如果存在 w∈ L(G),
w至少有两棵不同的派生树,则称 G是 二义性的 。否则,G为非二义性的。
二义性的问题是 不可解的 (unsolvable)问题。
2009-7-26 541
6.1.2 二义性
例 6-2 用其他方法消除二义性。
Gifa,S?if E then S else S | if E then S
Gifm,S→ U|M
U→ if E then S
U→ if E then M else U
M→ if E then M else M|S
Gifh,S→ TS|CS
C→ if E then
T → CS else
2009-7-26 542
6.1.2 二义性
例 6-3 设
Lambiguity={0n1n2m3m|n,m? 1}∪ {0n1m2m3n|n,m? 1}
可以用如下文法产生语言 Lambiguity:
G,S?AB|0C3
A?01|0A1
B?23|2B3
C?0C3|12|1D2
D?12|1D2
语言 Lambiguity不存在非二义性的文法。
2009-7-26 543
6.1.2 二义性
固有二义性的 (inherent ambiguity)
如果语言 L不存在非二义性文法,则称 L是固有二义性的,又称 L是 先天二义性的。
文法可以是二义性的。
语言可以是固有二义性的。
2009-7-26 544
6.1.3 自顶向下的分析和自底向上的分析
自顶向下的分析方法
– 通过考察是否可以从给定文法的开始符号派生出一个符号串,可以判定一个符号串是否为该文法的句子。
例
– S?aAb|bBa
– A?aAb|bBa
– B?d
2009-7-26 545
aabdabb的派生树的自顶向下的“生长”过程
2009-7-26 546
6.1.3 自顶向下的分析和自底向上的分析
自底向上 的分析方法
–通过考察是否可以将一个符号串归约为给定文法的开始符号,完成判定一个符号串是否为该文法的句子的任务。
和归约与派生是互逆过程相对应,自顶向下的分析与自底向上的分析互逆的分析过程。
2009-7-26 547
aabdabb的派生树的自底向上的“生长”过程
2009-7-26 548
6.2 上下文无关文法的化简
如下文法 含有无用的“东西”
G1,S?0|0A|E
A?ε|0A|1A|B
B?_C
C?0|1|0C|1C
D?1|1D|2D
E?0E2|E02
去掉 无用“东西”
后的 文法
G2,S?0|0A
A?ε|0A|1A|B
B?_C
C?0|1|0C|1C
2009-7-26 549
6.2 上下文无关文法的化简
去掉产生式 A?ε后的 文法
G3,S?0|0A
A?0|1|0A|1A|B
B?_C
C?0|1|0C|1C
去掉产生式 A?B后的文法
G4,S?0|0A
A?0|1|0A|1A| _C
C?0|1|0C|1C
可以去掉文法中的无用符号,ε产生式和单一产生式。
2009-7-26 550
6.2.1 去无用符号
无用符号 (useless symbol)
–对于任意 X∈ V∪ T,如果存在 w∈ L(G),
X出现在 w的派生过程中,即存在 α,
β∈ (V∪ T)*,使得 S?*αXβ?*w,则称 X
是有用的,否则,称 X是 无用符号。
对 CFG G=(V,T,P,S)
⑴ G中的符号 X既可能是有用的,也可能是无用的。当 X是无用的时候,它既可能是终极符号,也可能是语法变量。
2009-7-26 551
6.2.1 去无用符号
⑵ 对于任意 X∈ V∪ T,如果 X是有用的,
它必须同时满足如下两个条件:
① 存在 w∈ T*,使得 X?*w;
② α,β∈ (V∪ T)*,使得 S?*αXβ。
⑶ 注意到文法是语言的有穷描述,所以,
集合 V,T,P都是有穷的。从而我们有可能构造出有效的算法,来完成消除文法的无用符号的工作。
2009-7-26 552
6.2.1 去无用符号算法 6-1 删除派生不出终极符号行的变量。
输入,CFG G=(V,T,P,S)。
输出,CFG G′=(V′,T,P′,S),V′中不含派生不出终极符号行的变量,并且
L(G′)=L(G)。
主要步骤:
2009-7-26 553
6.2.1 去无用符号
(1) OLDV=Φ;
(2) NEWV={A|A?w∈ P且 w∈ T*};
(3) while OLDV≠NEWV do
begin
(4) OLDV=NEWV;
(5) NEWV=OLDV∪ {A|A?α∈ P
且 α∈ (T∪ OLDV)*}
end
(6) V′=NEWV;
(7) P′={ A?α|A?α∈ P且 A∈ V′且 α∈ (T∪ V′)*}
2009-7-26 554
6.2.1 去无用符号
第 (3)条语句控制对 NEWV进行迭代更新。
第一次循环将那些恰经过两步可以派生出终极符号行的变量放入 NEWV;第二次循环将那些恰经过三步和某些至少经过三步可以派生出终极符号行的变量放入 NEWV; ……,
第 n次循环将那些恰经过 n步和某些至少经过
n+1步可以派生出终极符号行的变量放入
NEWV。这个循环一直进行下去,直到所给文法 G中的所有可以派生出终极符号行的变量都被放入 NEWV中。
2009-7-26 555
6.2.1去无用符号定理 6-4 算法 6-1是正确的。
证明要点:首先证明对于任意 A∈ V,A被放入 V′中的充要条件是存在 w∈ T,A?n w。
再证所构造出的文法是等价的 。
(1)对 A被放入 NEWV的循环次数 n施归纳,证明必存在 w∈ T,满足 A?+ w。
2009-7-26 556
6.2.1去无用符号
(2)施归纳于派生步数 n,证明如果 A?n w,则
A被算法放入到 NEWV中 。 实际上,对原教材所给的证明进行分析,同时考虑算法 6-1
的实际运行,可以证明,A是在第 n次循环前被放入到 NEWV中的 。
(3)证明 L(G′)=L(G) 。 显然有 L(G′)?L(G),
所以只需证明 L(G)。
2009-7-26 557
6.2.1 去无用符号算法 6-2 删除不出现在任何句型中的语法符号。
输入,CFG G=(V,T,P,S)。
输出,CFG G′=(V′,T′,P′,S),V′∪ T′中的符号必在 G的某个句型中出现,并且有
L(G′)=L(G)。
主要步骤:
2009-7-26 558
6.2.1 去无用符号
主要步骤:
(1) OLDV=Φ;
(2) OLDT=Φ;
(3) NEWV={S}∪ {A|S?αAβ∈ P};
(4) NEWT={a|S?αaβ∈ P};
2009-7-26 559
6.2.1去无用符号
(5) while OLDV≠NEWV 或者 OLDT≠NEWT do
begin
(6) OLDV=NEWV;
(7) OLDT=NEWT;
(8) NEWV=OLDV∪ {B| A∈ OLDV且
A?αBβ∈ P 且 B∈ V};
(9) NEWT=OLDT∪ {a| A∈ OLDV且
A?αaβ∈ P 且 a∈ T};
end
2009-7-26 560
6.2.1去无用符号
(10) V′=NEWV;
(11) T′=NEWT;
(12) P′={ A?α| A?α∈ P且 A∈ V′且
α∈ (T′∪ V′)*}。
2009-7-26 561
6.2.1去无用符号定理 6-5 算法 6-2是正确的 。
证明要点:
(1) 施归纳于派生步数 n,证明如果 S?n αXβ,则当
X∈ V时,X在算法中被语句 (3)或者语句 (8)放入
NEWV;当 X∈ T时,它在算法中被语句 (4)或者语句 (9)放入 NEWT。
(2) 对循环次数 n施归纳,证明如果 X被放入 NEWT
或者 NEWV 中,则 必 定 存 在 α,
β∈ (NEWV∪ NEWT)*,使得 S?nαXβ。
(3) 证明 L(G′)=L(G) 。
2009-7-26 562
6.2.1去无用符号定理 6-6对于任意 CFL L,L≠Φ,则存在不含无用符号的 CFG G,使得 L(G)=L。
证明要点:
依次用算法 6-1和算法 6-2对文法进行处理,
可以得到等价的不含无用符号的文法。
不可先用算法 6-2后用算法 6-1。
2009-7-26 563
6.2.1去无用符号
例 6-2-1 设有如下文法
S?AB|a|BB,A?a,C?b|ABa
先用算法 6-2,文法被化简成:
S?AB|a|BB,A?a
再用算法 6-1,可得到文法:
S? a,A?a
显然,该文法中的变量 A是新的无用变量。
2009-7-26 564
6.2.2 去 ε-产生式
ε-产生式( ε-production)
– 形如 A?ε的产生式叫做 ε-产生式。
– ε-产生式 又称为 空产生式( null production。
可空 (nullable)变量
– 对于文法 G=(V,T,P,S)中的任意变量 A,如果 A?+ε,则称 A为 可空变量。
2009-7-26 565
6.2.2 去 ε-产生式
对形如 A?X1X2… Xm的产生式进行考察,
找出文法的可空变量集 U,然后对于?H?U,
从产生式 A?X1X2… Xm中删除 H中的变量 。
对于不同的 H,得到不同的 A产生式,用这组 A产生式替代产生式 A?X1X2… Xm。
必须避免在这个过程中产生新的 ε-产生式:
当 { X1,X2,…,Xm}?U时,不可将 X1,
X2,…,Xm同时从产生式 A?X1X2… Xm中删除 。
2009-7-26 566
6.2.2 去 ε-产生式算法 6-3求 CFG G的可空变量集 U。
输入,CFG G=(V,T,P,S)。
输出,G的可空变量集 U。
主要步骤:
(1) OLDU=Φ;
(2) NEWU={A| A?ε∈ P};
2009-7-26 567
6.2.2 去 ε-产生式
(3) while NEWU≠OLDUdo
begin
(4) OLDU = NEWU;
(5) NEWU= OLDU ∪ {A|A?α∈ P并且
α∈ OLDU*}
end
(6) U=NEWU
2009-7-26 568
6.2.2 去 ε-产生式定理 6-7 对于任意 CFG G,存在不含 ε-产生式的 CFG G′使得 L(G′)=L(G)-{ε}。
证明:
(1) 构造
设 CFG G=(V,T,P,S),
用 算法 6-3求出 G的可空变量集 U,
构造 P′。
2009-7-26 569
6.2.2 去 ε-产生式
对于?A?X1X2… Xm∈ P
将 A?α1α2… αm放入 P′,其中
if Xi∈ U then αi=Xi或者 αi=ε;
if Xi?U then αi=Xi
要求:在同一产生式中,α1,α2,…,αm不能同时为 ε。
2009-7-26 570
6.2.2 去 ε-产生式
证明对于任意 w∈ T+,A?nG w的充分必要条件是 A。
必要性:设 A?nG w,施归纳于 n,证明
A?mG′ w成立。
当 n=1时,由 A?G w知,A?w∈ P,按照定理所给的构造 G′的方法,必定有 A?w∈ P′。
所以,A?G′ w成立。
2009-7-26 571
6.2.2 去 ε-产生式
设 n≤k时结论成立 (k≥1),当 n=k+1时
A?X1X2… Xm
*G w1X2… Xm
*G w1w2… Xm
…
*G w1w2… wm
其中 w1w2…w m=w,且 w1,w2,……,wm∈ T*。
2009-7-26 572
6.2.2 去 ε-产生式注意到 w≠ε,必存在 1≤i≤m,wi≠ε,设 i,
j,…,k是 w1,w2,…,wm中所有非空串的下标,并且 1≤i≤j≤… ≤k≤m,即:
w= wiwj… wk
按照 G′的构造方法,A?XiXj…X k∈ P′
再由归纳假设,
Xi?*G′ wi,Xj?*G′ wj,…,Xk?*G′ wk。
2009-7-26 573
6.2.2 去 ε-产生式
A?*G′XiXj… Xk
*G′wiXj… Xk
*G′wiwj… Xk
…
*G′wiwj… wk
所以,结论对 n=k+1成立 。 由归纳法原理,
结论对所有的 n成立 。
2009-7-26 574
6.2.2 去 ε-产生式充分性:设 A?mG′ w,施归纳于 m,证明
A?nG w成立 。
当 m=1时,由 A?G′ w知,A?w∈ P′,按照定理所给的构造 G′的方法,必定有 A?α∈ P。
A?w是通过删除产生式 A?α右部中的可空变量而构造出来的,所以,
A?Gα?*G w 成立 。
2009-7-26 575
6.2.2 去 ε-产生式设 n≤k时结论成立 (k≥1),当 m=k+1时
A?*G′XiXj… Xk
*G′wiXj… Xk
*G′wiwj… Xk
…
*G′wiwj… wk=w
其中 Xi?*G′ wi,Xj?*G′ wj,…,Xk?*G′ wk 。
2009-7-26 576
6.2.2 去 ε-产生式表明 A? XiXj… Xk∈ P′。 按照 G′的构造方法,
必定存在 A?X1X2… Xm∈ P′,而且
{Xi,Xj,…,Xk}?{X1,X2,…,Xm}
{X1,X2,…,Xm}-{Xi,Xj,…,Xk}?U
从而,
A?G X1X2… Xm
*G XiXj… Xk
2009-7-26 577
6.2.2 去 ε-产生式再根据 Xi?*G′ wi,Xj?*G′ wj,…,Xk?*G′ wk和归纳假设,有
Xi?*G wi,Xj?*G wj,…,Xk?*G wk。
这表明,如下派生成立:
A?G X1X2… Xm
*G XiXj… Xk
*G wiXj… Xk
*G wiwj… Xk
…
*G wiwj… wk=w
2009-7-26 578
6.2.2 去 ε-产生式表明 结论对 m=k+1成立。由归纳法原理,结论对任意 m成立。
注意到 A 的任意性,当 S=A时结论成立 。 即:
S?*G w 的充分必要条件是 S?*G′ w
亦即,L(G′)=L(G)-{ε}。
定理得证。
2009-7-26 579
6.2.3 去单一产生式文法 Gexp1,E?E+T|E-T|T
T?T*F|T/F|F
F?F↑P|P
P?(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
存在派生:
E?T?F?P?id
2009-7-26 580
6.2.3 去单一产生式
Gexp3,E?E+T|E-T|T*F|T/F|F↑P|(E)|N(L)|id
T?T*F|T/F|F↑P| (E)|N(L)|id
F?F↑P|(E)|N(L)|id
P?(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
该文法中不存在类似的派生。
2009-7-26 581
6.2.3 去单一产生式
单一产生式 (unit production)
形如 A?B的产生式称为 单一产生式。
定理 6-8对于任意 CFG G,ε?L(G),存在等价的 CFG G1,G1不含无用符号,ε-产生式和单一产生式。
满足本定理的 CFG为 化简过的文法。
已有去无用符号和去 ε-产生式的结论,所以只讨论去单一产生式的问题。
2009-7-26 582
6.2.3 去单一产生式
证明要点:
( 1)构造 G2,满足 L(G2)=L(G),并且 G2中不含单一产生式。
用非单一产生式 A1?α取代 A1?*G An?α用到的产生式系列 A1?A2,A2?A3,…,An-
1?An,An?α。其中,A1?A2,
A2?A3,…,An-1?An都是单一产生式。
( n≥1)
2009-7-26 583
6.2.3 去单一产生式
( 2) 证明 L(G2)=L(G)。
用 A1?α所完成的派生 A1?α与产生式系列
A1?A2,A2?A3,……,An-1?An,An?α所完成的派生 A1?*G An?α相对应 。
在原文法中可能会出现一个变量在派生过程中循环出现的情况,在 w∈ L(G) 证明 w ∈ L(G2)
的过程中,要取 w在 G中的一个最短的最左派生 。
S=α0?Gα1?Gα2?G…?Gαn=w
2009-7-26 584
6.2.3 去单一产生式
( 3) 删除 G2中的无用符号。
由于在删除单一产生式后,文法中可能出现新的无用符号,因此,我们还需要再次删除新出现的无用符号。
此外,在去 ε-产生式后可能会产生新的单一产生式,也可能会引进新的无用符号。这是值得注意的。
2009-7-26 585
6.3 乔姆斯基范式
乔姆斯基范式文法 (Chomsky normal form,
CNF)简称为 Chomsky文法,或 Chomsky
范式。
CFG G=(V,T,P,S)中的产生式形式:
A?BC,A?a
其中,A,B,C∈ V,a∈ T。
CNF中,不允许有 ε-产生式、单一产生式。
2009-7-26 586
6.3 乔姆斯基范式
例 6-3-1 试将文法 Gexp4转换成等价的 GNF。
Gexp4,E?E+T| T*F|F↑P| (E)| id
T?T*F| F↑P| (E) |id
F?F↑P| (E) |id
P?(E) |id
可以分两步走
– 变成 A?a和 A?A1A2…A n的形式。
– 变成 CNF。
2009-7-26 587
第一步
E?EA+T| T A*F|F A↑P| A(EA5| id
T?TA*F| FA↑P| A(EA) |id
F?FA↑P| A(EA)|id
P?A(EA) |id
A+?+
A*?*
A↑?↑
A(?(
A)?)
2009-7-26 588
第二步
GexpCNF,E?EA1|
TA2
E?FA3| A(A4| id
T?TA2| FA3| A(A4 |id
F?FA3| A(A4|id
P?A(A4 |id
A+?+
A*?*
A↑?↑
A(?(
A)?)
A1?A+T
A2?A*F
A3?A↑P
A4?EA)
2009-7-26 589
6.3 乔姆斯基范式定理 6-9对于任意 CFG G,ε?L(G),存在等价的 CNF G2 。
证明要点:
1,构造 CNF
按照上述例子所描述的转换方法,在构造给定
CFG的 CNF时,可以分两步走。
假设 G为化简过的文法
构造 G1=(V1,T,P1,S) G1中的产生式都是形如
A?B1B2… Bm和 A?a的产生式,其中,A,B1,
B2,…,Bm∈ V1,a∈ T,m≥2
2009-7-26 590
6.3 乔姆斯基范式
构造 CNF G2=(V2,T,P2,S)。
m≥3时,引入新变量,B1,B2,…,Bm-2,
将 G1的形如 A?A1A2… Am的产生式替换成
A?A1B1
B1?A2B2
…
Bm-2?Am-1Am
2009-7-26 591
6.3 乔姆斯基范式
2,构造的正确性证明。
按照上述构造,证明被替换的产生式是等价的。
例如:在第二步中 {A?A1B1,
B1?A2B2,…,Bm-2?Am-1Am}与
A?A1A2… Am等价。
2009-7-26 592
6.3 乔姆斯基范式
例 6-6 试将下列文法转换成等价的 CNF。
S?bA | aB
A?bAA | aS | a
B?aBB | bS | b
2009-7-26 593
6.3 乔姆斯基范式
先引入变量 Ba,Bb和产生式 Ba?a,Bb?b,
完成第一步变换 。
S?BbA | BaB
A?BbAA | BaS | a
B?BaBB | BbS | b
Ba?a
Bb?b
2009-7-26 594
6.3 乔姆斯基范式
引入新变量 B1,B2
S?BbA | BaB
A?BbB1 | BaS | a
B?BaB2 | BbS | b
Ba?a
Bb?b
B1?AA
B2?BB
2009-7-26 595
6.3 乔姆斯基范式
不能因为原来有产生式 A?a和 B?b而放弃引进变量 Ba,Bb和产生式 Ba?a,Bb?b。
L(A)={x | x∈ {a,b}+ & x中 a的个数比 b的个数恰多 1个 }。
L(B)={x | x∈ {a,b}+ & x中 b的个数比 a的个数恰多 1个 }。
L(Ba)={ a }。
L(Bb)={ b }。
2009-7-26 596
6.4 格雷巴赫范式
格雷巴赫范式文法 (Greibach normal
form,GNF)简称为 Greibach文法,或
Greibach范式。
A?aα
其中,A∈ V,a∈ T,α∈ V* 。
在 GNF中,有如下两种形式的产生式
– A?a
– A?aA1A2…A m (m≥1)
2009-7-26 597
6.4 格雷巴赫范式
右线性文法是一种特殊的 GNF。
由于 GNF中不存 ε-产生式,所以对任意的
GNF G,ε?L(G)。
当 ε?L(G′)时,能够找到一个 GNF G,使得
L(G)=L(G′) 。
经过化简的 CFG,都有一个等价的 GNF。
2009-7-26 598
6.4 格雷巴赫范式引理 6-1 对于任意的 CFG G=(V,T,P,S),
A?αBβ∈ P,且 G中所有的 B产生式为
B?γ1 |γ2 |…|γ n
取 G1=( V,T,P1,S)
P1=(P-{A?αBβ})∪ {A?αγ1β,A?αγ2β,…,
A?αγnβ}
则,L(G1)=L(G)。
2009-7-26 599
6.4 格雷巴赫范式
证明以下两组产生式等价
– A?αBβ ; B?γ1 |γ2 |…|γ n
– { A?αγ1β,A?αγ2β,…,A?αγnβ}
2009-7-26 600
6.4 格雷巴赫范式
递归 (recursive)
如果 G中存在形如 A?nαAβ的派生,则称该派生是关于变量 A递归的,简称为递归派生。
当 n=1时,称该派生关于变量 A直接递归
(directly recursive),简称为直接递归派生。
形如 A?αAβ的产生式是变量 A的 直接递归的 (directly recursive)产生式。
2009-7-26 601
6.4 格雷巴赫范式
当 n≥2时,称该派生是关于变量 A的 间接递归 (indirectly recursive)派 生。简称为间接递归派生。
当 α=ε时,称相应的 (直接 /间接 )递归为 (直接
/间接 )左递归 (left-recursive);
当 β=ε时,称相应的 (直接 /间接 )递归为 (直接
/间接 )右递归 (right-recursive)。
2009-7-26 602
6.4 格雷巴赫范式
引理 6-2 对于任意的 CFG G=(V,T,P,
S),G中所有 A的产生式
A?β1|β2 |… |βm
A?β1B|β2 B |… |βm B
B?α1|α2 |… |αn
B?α1B|α2 B |… |αn B
可以被等价地替换为产生式组
A?Aα1 |Aα2 |… |Aαn
A?β1|β2 |… |βm
2009-7-26 603
6.4 格雷巴赫范式
证明要点:
用直接右递归取代原来的直接左递归。
两组产生式产生的符号串都是
121,,,,,hhhhk qq
前者是先产生然后产生 βk 。
121,,,,,hhhh qq
2009-7-26 604
6.4 格雷巴赫范式
后者先产生 βk 。
然后产生
121,,,,,hhhh qq
2009-7-26 605
6.4 格雷巴赫范式
121
21
1
.,,
.,,
.,,,,,
hhhhk
hhhk
hhk
hqk
qq
qq
qq
B
B
BA
121
121
121
12
1
.,,
.,,
.,,
.,,,,,
hhhhk
hhhh
hhh
hh
h
qq
qq
q
A
A
A
AA
2009-7-26 606
6.4 格雷巴赫范式定理 6-10对于任意 CFG G,ε?L(G),存在等价的 GNF G1。
证明要点:
(1)使用引理 6-1将产生式都化成如下形式的产生式
A?A1A2… Am
A?aA1A2… Am-1
A?a
其中,A,A1,A2,…,Am∈ V1,a∈ T,m≥2。
2009-7-26 607
6.4 格雷巴赫范式
(2)根据引理 6-1和 6-2,将产生式变成如下形式的产生式
Ai?Ajα i≤j+1
Ai?aα
Bi?α
其中,V2=V1∪ { B1,B2,…,Bn},V1∩{ B1,
B2,…,Bn}=Φ。
,B类变量”,{ B1,B2,…,Bn}是在文法的改造过程中引入的新变量。
V1中的变量称为,A类变量”。
2009-7-26 608
6.4 格雷巴赫范式
( 3)根据引理 6-1,从编号较大的变量开始,
逐步替换,使所有产生式满足 GNF的要求:
1) for k=m-1 to 1 do
2) if Ak?Ak+1β∈ P2 then
3) for 所有的 Ak+1产生式 Ak+1?γ do
将产生式 Ak?γβ放入 P3;
4) for k= 1 to n do
5) 根据引理 6-1,用 P3中的产生式将所有的 Bk产生式替换成满足 GNF要求的形式 。
2009-7-26 609
6.5 自嵌套文法
自嵌套文法 (self-embedding grammar)
CFG G=(V,T,P,S)是化简后的文法,如果 G中存在有形如 A?+αAβ的派生,则称 G
为 自嵌套文法,其中 α,β∈ (V∪ T)+。
自嵌套的文法描述的语言可以是正则语言
例如:
S?0S0|1S1|0S1|1S0|0S|1S|0|1
2009-7-26 610
6.5 自嵌套文法定理 6-11 非自嵌套的文法产生的语言是正则语言。
证明要点,
( 1)将 G化成 GNF
( 2)取 RG G′=(V′,T,P′,[S]),其中
V′={[α]|α∈ V+并且 |α|≤m(n-2)+1}
P′={[Aα]?a[βα]|A?aβ∈ P并且 β∈ V*}
当 α=ε时,[α]=ε。
2009-7-26 611
6.6 小结本章讨论了 CFG的派生树,A子树,最左派生与最右派生,派生与派生树的关系,二义性文法与固有二义性语言,句子的自顶向下分析和自底向上分析;无用符号的消去算法,空产生式的消除,单一产生式的消除。 CFG的 CNF和 GNF;
CFG的自嵌套特性。
(1)S?*α的充分必要条件为 G有一棵结果为 α的派生树 。
(2)如果 α是 CFG G的一个句型,则 G中存在 α的最左派生和最右派生 。
2009-7-26 612
6.6 小结
(3)文法可能是二义性的,但语言只可能是固有二义性的,且这种语言是存在的 。
(4)对于任意 CFG G,ε?L(G),存在等价的 CFG
G1,G1不含无用符号,ε-产生式和单一产生式 。
(5)对于任意 CFG G,ε?L(G),存在等价的 CNF
G2。
(6)对于任意 CFG G,ε?L(G),存在等价的 GNF
G3。
(7)非自嵌套的文法产生的语言是正则语言 。
2009-7-26 613
第 7章下推自动机
PDA描述 CFL,所以它应该与 CFG等价。
PDA应该包含 FA的各个元素,或者包含那些可以取代 FA的各个元素的功能的元素。
PDA按照最左派生的派生顺序,处理处于当前句型最左边的变量,因此,需要采用栈作为其存储机构。
按照 FA的“习惯”,PDA用终态接受语言。
模拟 GNF的派生 PDA用空栈接受语言。
2009-7-26 614
第 7章下推自动机
主要内容
– PDA的基本概念 。
– PDA的构造举例 。
– 用终态接受语言和用空栈接受语言的等价性 。
– PDA是 CFL的接受器 。
重点
– PDA的基本定义及其构造,PDA是 CFL的等价描述 。
难点
– 根据 PDA构造 CFG。
2009-7-26 615
7.1 基本定义
PDA的物理模型
2009-7-26 616
7.1 基本定义
PDA应该 含有三个基本结构
– 存放输入符号串的输入带。
– 存放文法符号的栈。
– 有穷状态控制器。
PDA的动作
– 在有穷状态控制器的控制下根据它的当前状态、
栈顶符号、以及输入符号作出相应的动作,在有的时候,不需要考虑输入符号。
2009-7-26 617
7.1 基本定义
下推自动机 (pushdown automaton,PDA)
M= (Q,∑,Γ,δ,q0,Z0,F)
Q——状态的非空有穷集合 。q∈ Q,q称为
M的一个 状态 (state);
∑——输入字母表 (input alphabet)。 要求 M的输入字符串都是 ∑上的字符串;
Γ——栈符号表 (stack alphabet)。A∈ Γ,叫做一个栈符号;
2009-7-26 618
7.1 基本定义
Z0——Z0∈ Γ叫做 开始符号 (start symbol),
是 M启动时候栈内惟一的一个符号 。 所以,
习惯地称其为栈底符号;
q0——q0∈ Q,是 M的 开始状态 (initial state),
也可叫做 初始状态 或者 启动状态 ;
F——F?Q,是 M的 终止状态 (final state)集合,简称为终态集。q∈ F,q称为 M的终止状态,也可称为 接受状态 (accept state),
简称为终态。
2009-7-26 619
7.1 基本定义
δ——状态转移函数 (transition function),有时候又叫做 状态转换函数 或者 移动函数。
δ,Q× (∑∪ {ε})× Γ? *2Q
2009-7-26 620
7.1 基本定义
δ(q,a,Z)={(p1,γ1),(p2,γ2),…,
(pm,γm)}
表示 M在状态 q,栈顶符号为 Z时,读入字符 a,对于 i=1,2,…,m,可以选择地将状态变成 pi,并将栈顶符号 Z弹出,将 γi中的符号从右到左依次压入栈,然后将读头向右移动一个带方格而指向输入字符串的下一个字符。
2009-7-26 621
7.1 基本定义
δ(q,ε,Z)={(p1,γ1),(p2,γ2),…,
(pm,γm)}
表示 M进行一次 ε-移动 (空移动 ),即 M在状态 q,栈顶符号为 Z时,无论输入符号是什么,对于 i=1,2,…,m,可以选择地将状态变成 pi,并将栈顶符号 Z弹出,将 γi中的符号从右到左依次压入栈,读头不移动。
2009-7-26 622
7.1 基本定义
符号使用约定
英文字母表较为前面的小写字母,如 a,b,
c,…,表示输入符号;
英文字母表较为后面的小写字母,如 x,y,
z,…,表示由输入字符串;
英文字母表的大写字母,表示栈符号;
希腊字母 α,β,γ,…,表示栈符号串。
2009-7-26 623
7.1 基本定义
即时描述 (instantaneous description,ID)
(q,w,γ)∈ (Q,∑*,Γ*)称为 M的一个即时描述 。它表示 M处于状态 q,w是当前还未处理的输入字符串,而且 M正注视着 w
的首字符,栈中的符号串为 γ,γ的最左符号为栈顶符号,最右符号为栈底的符号,
较左的符号在栈的较上面,较右的符号在栈的较下面。
2009-7-26 624
7.1 基本定义如果 (p,γ)∈ δ(q,a,Z),a∈ ∑,则
(q,aw,Zβ)├M(p,w,γβ)
表示 M做一次非空移动,从 ID(q,aw,Zβ)变成 ID(p,w,γβ)。
如果 (p,γ)∈ δ(q,ε,Z),则
(q,w,Zβ)├M(p,w,γβ)
表示 M做一次空移动,从 ID(q,aw,Zβ)变成
ID(p,w,γβ)。
2009-7-26 625
7.1 基本定义
├Mn是 ├M 的 n次幂
– (q1,w1,β1)├Mn(qn,wn,βn)
├M*是 ├M 的克林闭包
– (q,w,α)├M*(p,x,β)
├M+是 ├M 的正闭包
– (q,w,α)├M+(p,x,β)
2009-7-26 626
7.1 基本定义
M接受的语言
–M用终态接受的语言
L(M)={w | (q0,w,Z0)├*(p,ε,β)且
p∈ F}
–M用空栈接受的语言
N(M) ={w | (q0,w,Z0)├*(p,ε,ε)}
2009-7-26 627
7.1 基本定义
例 7-1 考虑接受语言 L={w2wT | w∈ {0,1}*}
的 PDA的设计。
解法 1:
先设计产生 L的 CFG G1:
G1,S?2|0S0|1S1
再将此文法转化成 GNF:
G2,S?2|0SA|1SB
A?0
B?1
2009-7-26 628
7.1 基本定义
句子 0102010的最左派生和我们希望相应的 PDA M的动作。
派生 M应该完成的动作
S?0SA 从 q0启动,读入 0,将 S弹出栈,将 SA压入栈,状态不变
01SBA 在状态 q0,读入 1,将 S弹出栈,将 SB压入栈,状态不变
010SABA 在状态 q0,读入 0,将 S弹出栈,将 SA压入栈,状态不变
0102ABA 在状态 q0,读入 2,将 S弹出栈,将 ε压入栈,状态不变
01020BA 在状态 q0,读入 0,将 A弹出栈,将 ε压入栈,状态不变
010201A 在状态 q0,读入 1,将 B弹出栈,将 ε压入栈,状态不变
0102010 在状态 q0,读入 0,将 A弹出栈,将 ε压入栈,状态不变
2009-7-26 629
7.1 基本定义
M1=({q0},{0,1,2},{S,A,B},δ1,q0,
S,Φ)。 其中:
δ1(q0,0,S)={(q0,SA)}
δ1(q0,1,S)={(q0,SB)}
δ1(q0,2,S)={(q0,ε)}
δ1(q0,0,A)={(q0,ε)}
δ1(q0,1,B)={(q0,ε)}
此时有,N(M1)=L。
2009-7-26 630
7.1 基本定义
M2=({q0,q1},{0,1,2},{S,A,B,Z0},δ2,q0,Z0,{q1})
δ2(q0,0,Z0)={(q0,SAZ0)}
δ2(q0,1,Z0)={(q0,SBZ0)}
δ2(q0,2,Z0)={(q1,ε)}
δ2(q0,0,S)={(q0,SA)}
δ2(q0,1,S)={(q0,SB)}
δ2(q0,2,S)={(q0,ε)}
δ2(q0,0,A)={(q0,ε)}
δ2(q0,1,B)={(q0,ε)}
δ2(q0,ε,Z0)={(q1,ε)}
此时有,N(M2)=L(M2)=L。
2009-7-26 631
7.1 基本定义
解法 2:
注意到 L={w2wT|w∈ {0,1}*},所以 PDA M3
的工作可以分成两大阶段。
– 在读到字符 2之前,为“记载”阶段:每读到一个符号就在栈中做一次相应的记载。
– 在读到 2以后,再读到字符时,就应该进入
“匹配”阶段:由于栈的“先进后出”特性正好与 wT相对应,所以,用栈顶符号逐一地与输入字符匹配。
2009-7-26 632
7.1 基本定义
M3=({q0,q1,q2,qf,qt},{0,1,2},{ A,
B,Z0},δ3,q0,Z0,{qf})
q0为开始状态
q1为记录状态
q2为匹配状态
qf为终止状态
qt陷阱状态
2009-7-26 633
7.1 基本定义
δ3(q0,0,Z0)={(q1,AZ0)}
δ3(q0,1,Z0)={(q1,BZ0)}
δ3(q0,2,Z0)={(qf,ε)}
δ3(q1,0,A)={(q1,AA)}
δ3(q1,1,A)={(q1,BA)}
δ3(q1,0,B)={(q1,AB)}
δ3(q1,1,B)={(q1,BB)}
2009-7-26 634
7.1 基本定义
δ3(q1,2,A)={(q2,A)}
δ3(q1,2,B)={(q2,B)}
δ3(q2,0,A)={(q2,ε)}
δ3(q2,0,B)={(qt,ε)}
δ3(q2,1,B)={(q2,ε)}
δ3(q2,1,A)={(qt,ε)}
δ3(q2,ε,Z0)={(qf,ε)}
此时有,N(M3)=L(M3)=L。
2009-7-26 635
7.1 基本定义
不追求让 PDA同时用终止状态和空栈接受同样的语言,还可以删除状态 qf。这样我们可以得到 PDA M4 。
M4=({q0,q1,q2 },{0,1,2},{ A,B,
Z0},δ4,q0,Z0,Φ)
δ4(q0,0,Z0)={(q1,AZ0)}
δ4(q0,1,Z0)={(q1,BZ0)}
δ4(q0,2,Z0)={(q2,ε)}
2009-7-26 636
7.1 基本定义
δ4(q1,0,A)={(q1,AA)}
δ4(q1,1,A)={(q1,BA)}
δ4(q1,0,B)={(q1,AB)}
δ4(q1,1,B)={(q1,BB)}
δ4(q1,2,A)={(q2,A)}
δ4(q1,2,B)={(q2,B)}
δ4(q2,0,A)={(q2,ε)}
δ4(q2,1,B)={(q2,ε)}
2009-7-26 637
7.1 基本定义
确定的 (deterministic)PDA
(q,a,Z)∈ Q× ∑× Γ,|δ(q,
a,Z)|+|δ(q,ε,Z)|≤1
PDA在每一个状态 q和一个栈顶符号下的动作都是惟一的。
关键
– 对于?(q,Z)∈ Q× Γ,M此时如果有非空移动,
就不能有空移动。
– 每一种情况下的移动都是惟一的。
2009-7-26 638
7.1 基本定义
例 7-2 构造接受 L={wwT|w∈ {0,1}*}的 PDA。
差异
δ(q0,0,A)={(q0,AA),(q1,ε)}
0是 w中的 0或者是 wT的首字符 0;
δ(q0,1,B)={(q0,BB),(q1,ε)}
1是 w中的 1或者是 wT的首字符 1。
2009-7-26 639
7.2 PDA与 CFG等价
对于任意 PDA M1,存在 PDA M2,使得
L(M2)=N(M1);
对于任意 PDA M1,存在 PDA M2,使得 N
(M2)= L (M1)。
CFL可以用空栈接受语言的 PDA接受。
PDA接受语言可以用 CFG描述。
2009-7-26 640
7.2.1 PDA用空栈接受和用终止状态接受等价定理 7-1 对于任意 PDA M1,存在 PDA M2,
使得 N (M2)= L (M1)。
证明要点:
( 1) 构造 。
设 PDA M1 = (Q,∑,Γ,δ1,q01,Z01,F)
取 PDA M2 = (Q∪ {q02,qe},∑,Γ∪ {Z02},δ,
q02,Z02,F)
其中 Q∩{q02,qe}=Γ∩{Z02}=Φ。
2009-7-26 641
7.2.1 PDA用空栈接受和用终止状态接受等价
δ2(q02,ε,Z02)={(q01,Z01Z02)}
(q,a,Z)∈ Q× ∑× Γ,δ2(q,a,Z)=δ1(q,a,Z);
(q,Z)∈ (Q-F)× Γ,δ2(q,ε,Z)=δ1(q,ε,Z);
(q,Z)∈ F× Γ
δ2(q,ε,Z)=δ1(q,ε,Z)∪ {(qe,ε)};
q∈ F,δ2(q,ε,Z02)= {(qe,ε)};
Z∈ Γ∪ {Z02},δ2(qe,ε,Z)={(qe,ε)}
2009-7-26 642
7.2.1 PDA用空栈接受和用终止状态接受等价
( 2) 证明 N (M2)= L (M1)。
x∈ L(M1)
(q01,x,Z01)├M1*(q,ε,γ)且 q∈ F
(q01,x,Z01Z02)├M1*(q,ε,γZ02)且 q∈ F
(q01,x,Z01Z02)├M2*(q,ε,γZ02)且 q∈ F
2009-7-26 643
7.2.1 PDA用空栈接受和用终止状态接受等价
(q01,x,Z01Z02)├M2*(q,ε,γZ02)├M2*(qe,
ε,ε)且 q∈ F
(q01,x,Z01 Z02)├M2*(qe,ε,ε)
(q02,x,Z02)├M2(q01,x,Z01Z02)├M2*(qe,
ε,ε)
(q02,x,Z02)├M2*(qe,ε,ε)
x∈ N(M2)
2009-7-26 644
7.2.1 PDA用空栈接受和用终止状态接受等价定理 7-2 对于任意 PDA M1,存在 PDA M2,
使得 L (M2)= N (M1)。
证明要点:
(1)构造。
设 PDA M1 = (Q,∑,Γ,δ1,q01,Z01,Φ)
2009-7-26 645
7.2.1 PDA用空栈接受和用终止状态接受等价取 PDA M2 = (Q∪ {q02,qf},∑,Γ∪ {Z02},δ,
q02,Z02,{qf})
其中 Q∩{q02,qf}=Γ∩{Z02}=Φ。 δ2的定义如下,
δ2(q02,ε,Z02)={(q01,Z01Z02)}
对于?(q,a,Z)∈ Q× (∑∪ {ε})× Γ,δ2(q,a,
Z)=δ1(q,a,Z)。
δ2(q,ε,Z02)= {(qf,ε)}
2009-7-26 646
7.2.1 PDA用空栈接受和用终止状态接受等价
(2) 证明 L (M2)= N (M1)。
x∈ L(M2)
(q02,x,Z02)├M2*(qf,ε,ε)
(q02,x,Z02)├M2(q01,x,Z01Z02)
(q02,x,Z02)├M2(q01,x,Z01Z02)├M2*(qf,ε,ε)。
(q01,x,Z01Z02)├M2*(q,ε,Z02)且 (q,ε,
Z02)├M2*(qf,ε,ε)
(q01,x,Z01Z02)├M1*(q,ε,Z02)。
(q01,x,Z01)├M1*(q,ε,ε)。
x∈ N(M1)。
2009-7-26 647
7.2.2 PDA与 CFG等价定理 7-3 对于任意 CFL L,存在 PDA M,使得 N(M)=L。
证明要点:先考虑识别 L-{ε}的 PDA,然后再考虑对 ε的处理问题。
2009-7-26 648
7.2.2 PDA与 CFG等价
(1) 构造 PDA。
设 GNF G=(V,T,P,S),使得 L(G)=L- {ε}。
取 PDA M=({q},T,V,δ,q,S,Φ)
对于任意的 A∈ V,a∈ T,
δ(q,a,A)={(q,γ)|A?aγ∈ P}
也就是说,(q,γ) ∈ δ(q,a,A)的充分必要条件是 A?aγ∈ P。
2009-7-26 649
7.2.2 PDA与 CFG等价
(2) 证明构造的正确性,N(M)=L- {ε}。
施归纳于 w的长度 n,证明
(q,w,S)├Mn(q,ε,α)的充分必要条件为
S?nwα。
并且在假设结论对 n=k成立,而证明结论对 n=k+1成立时,取 w=xa,|x|=k,a∈ T。
在证明必要性时有如下过程,充分性的证明过程是倒退回来。
2009-7-26 650
7.2.2 PDA与 CFG等价
(q,w,S)=(q,xa,S)├Mk(q,a,γ)├M(q,ε,α)
此时必定存在 A∈ V,γ=Aβ1,(q,β2)∈ δ(q,a,A)。
(q,a,γ)=(q,a,Aβ1)├M(q,ε,β2β1)=(q,ε,α)。
由 (q,β2)∈ δ(q,a,A)就可以得到 A?aβ2∈ P,再由归纳假设,得到
S?kxAβ1。
合起来就有
S?kx Aβ1?xaβ2β1。
2009-7-26 651
7.2.2 PDA与 CFG等价
(3)考虑 ε∈ L的情况。
先按照 (1)的构造方法构造出 PDA
M=({q},T,V,δ,q,S,Φ)
使得 N(M)=L-{ε}。 然后取
M1=({q,q0},T,V∪ {Z},δ1,q0,Z,Φ)
其中,q0≠q,Z?V,令
δ1(q0,ε,Z)={(q0,ε),(q,Z0)},
对于?(a,A)∈ T× V
δ1(q,a,A)=δ(q,a,A)
2009-7-26 652
7.2.2 PDA与 CFG等价定理 7-4 对于任意的 PDA M,存在 CFG G使得 L(G)=N(M)。
证明要点:
(1) 构造对应 (q1,A1A2… An)∈ δ(q,a,A)难以用产生式 [q,A]?a[q1,A1A2… An]模拟。
同样也难以用 [q,A]?a[q1,A1] [q2,
A2]… [qn,An]模拟。
2009-7-26 653
7.2.2 PDA与 CFG等价
PDA的移动 (q1,A1A2…A n)∈ δ(q,a,A)需要用如下形式的产生式模拟。
– [q,A,qn+1]?a[q1,A1,q2] [q2,A2,q3] …
[qn,An,qn+1]
– q2,…,qn是分别对应 PDA恰“处理完” A1进而处理 A2,…,恰“处理完” An-1进而处理 An
的状态。当然就有了恰“处理完” An而进入的状态 qn+1,这个状态就是“处理完” A后其次栈顶变为栈顶的状态。
2009-7-26 654
7.2.2 PDA与 CFG等价取 CFG G= (V,∑,P,S),其中:
V={S}∪ Q× Γ× Q
P={S?[q0,Z0,q]|q∈ Q}∪
∪ {[q,A,qn+1]?a[q1,A1,q2] [q2,A2,
q3]… [qn,An,qn+1] | (q1,A1A2… An)∈ δ(q,
a,A)且 a∈ ∑∪ {ε},q2,q3,…,qn、
qn+1∈ Q且 n≥1}∪
∪ {[q,A,q1]?a|(q1,ε)∈ δ(q,a,A)}
2009-7-26 655
7.2.2 PDA与 CFG等价
(2) 构造的正确性。
先证一个更一般的结论,[q,A,p]?*x的充分必要条件是 (q,x,A)├(p,ε,ε),然后根据这个一般的结论得到 q=q0,A=S时的特殊结论 ——构造的正确性。
必要性:设 [q,A,p]?i x,施归纳于 i,
证明 (q,x,A)├*(p,ε,ε)
充分性:设 (q,x,A)├i(p,ε,ε)成立,施归纳于 i证明 [q,A,p]?*X 。
2009-7-26 656
7.3 小结
PDA M是一个七元组,M= (Q,∑,Γ,δ,
q0,Z0,F)
它是 CFL的识别模型,它比 FA多了栈符号,
这些符号和状态一起用来记录相关的语法信息。
在决定移动时,它将栈顶符号作为考虑的因素之一。
2009-7-26 657
7.3 小结
PDA可以用终态接受语言,也可以用空栈接受语言。
与 DFA不同,?(q,a,Z)∈ Q× ∑× Γ,
DPDA仅要求 |δ(q,a,Z)|+|δ(q,ε,Z)|≤1
2009-7-26 658
7.3 小结
关于 CFG和 PDA主要有如下结论:
(1) 对于任意 PDA M1,存在 PDA M2,使得 N (M2)= L (M1);
(2) 对于任意 PDA M1,存在 PDA M2,使得 L (M2)= N (M1);
(3) 对于任意 CFL L,存在 PDA M,使得
N(M)=L;
(4) 对于任意的 PDA M,存在 CFG G使得
L(G)=N(M)。
2009-7-26 659
第 8章 CFL的性质
本章讨论 CFL的性质
主要内容
– CFL的泵引理及其应用,Ogden引理。
– CFL的封闭性
封闭运算:并、乘、闭包、代换、同态映射、
逆同态映射
不封闭运算:交、补
2009-7-26 660
第 8章 上下文无关语言的性质
CFL的判定算法。
– 判定 CFG产生的语言是否为空、有穷、无穷。
– 一个给定的符号串是否为该文法产生的语言的一个句子等问题。
重点
– CFL的封闭性,CFL的泵引理 。
难点
– CFL的泵引理的应用,CFL的同态原象是 CFL。
2009-7-26 661
8.1 上下文无关语言的泵引理
启发
RG G=(V,T,P,S),使得 L(G)=L,当 x
足够长时,如 |x|≥|V|+1时,存在 u,v、
w∈ T*,|v|≥1,使得 x=uvw,当 G为右线性文法时,必定存在语法变量 A,使得如下派生成立:
S?* uA?* uvA?* ……?* uviA?* uviw
V是可以被重复任意多次的字串!
CFL也有类似性质?
2009-7-26 662
8.1 上下文无关语言的泵引理
CFL的自嵌套特性:如果 L是一个 CFL,
CFG G=(V,T,P,S)是产生 L的文法 。 当
L是一个无穷语言时,必存在 w∈ L,A∈ V,
α,β∈ (V∪ T)*,且 α和 β中至少有一个不为
ε,使得如下派生成立 S?*
γAδ?+γαAβδ?+z
文法 G中存在有如下形式的派生
A?+αAβ
2009-7-26 663
8.1 上下文无关语言的泵引理
这种类型的派生预示着
S?* γAδ?+γαAβδ?+ z
并且
S?* γAδ?+γαnAβnδ?+z′
设 α?* v,β?* x,γ?* u,A?* w,δ?*
y
可以得到如下派生
2009-7-26 664
8.1 上下文无关语言的泵引理
S?* γAδ
* uαAβδ
* uαAβy
…
*uαnAβn y
* uvnAxny
* uvnwxny
2009-7-26 665
8.1 上下文无关语言的泵引理引理 8-1 ( CFL的泵引理) 对于任意的 CFL
L,存在仅仅依赖于 L的正整数 N,对于任意的 z∈ L,当 |z|≥N时,存在 u,v,w,x,
y,使得 z=uvwxy,同时满足:
(1) |vwx|≤N;
(2) |vx|≥1;
(3) 对于任意的非负整数 i,uviwxiy∈ L。
2009-7-26 666
8.1 上下文无关语言的泵引理
2009-7-26 667
8.1 上下文无关语言的泵引理
证明要点:
( 1) 用 CNF作为 CFL的描述工具 。
( 2) 对于任意的 z∈ L,当 k是 z的语法树的最大路长时,必有 |z|≤2k-1成立 。
( 3) 仅当 z的语法树呈图 8-1所示的满二元树时,才有 |z|=2k-1,其他时候均有 |z|<2k-1。
( 4) 取 N=2|V|=2|V|+1-1,z∈ L,|z|≥N。
2009-7-26 668
8.1 上下文无关语言的泵引理
2009-7-26 669
8.1 上下文无关语言的泵引理
( 5) 取 z的语法树中的最长的一条路 p,p中的非叶子结点中必定有不同的结点标有相同的语法变量 。
( 6) p中最接近叶子且都标有相同的语法变量 A的两个结点为 v1,v2,如图 8-2所示 。
2009-7-26 670
8.1 上下文无关语言的泵引理
结点 v1左边的所有叶子结点的标记从左到右构成的字符串为 u;
结点 v1的为根的子树中,v2左边的所有叶子结点的标记从左到右构成的字符串为 v;
结点 v2为根的子树的结果为 w;
结点 v1为根的子树中 v2右边的所有叶子结点的标记从左到右构成的字符串为 x;
结点 v1右边的所有叶子结点的标记从左到右构成的字符串为 y。
2009-7-26 671
8.1 上下文无关语言的泵引理
z=uvwxy
注意到 v1-子树的最大路长小于等于 |V|+1,所以,
v1的结果 vwx满足,|vwx|≤2(|V|+1)-1=2|V|=N
v1的后代 v2标记为变量 A,所以,|vx|≥1。
此时有
S?* uAy?+ uvAxy?+ uvwxy
显然,对于 i=0,1,2,3,…
A?* viAxi?+ viwxi
2009-7-26 672
8.1 上下文无关语言的泵引理
总结上述推导
( 7) S?* uAy?+ uvAxy?+ uvwxy=z,
|vwx|≤2(|V|+1)-1=2|V|=N,|vx|≥1。
( 8)对于任意非负整数 i,S?* uAy?+
uviAxiy?+ uviwxiy。
2009-7-26 673
8.1 上下文无关语言的泵引理
例 8-1 证明 L={anbncn|n≥1}不是 CFL。
证明:
取 z=aNbNcN∈ L
⑴ v=ah,x=bf,h+f≥1。
uviwxiy=aN+(i-1)hbN+(i-1)fcN,
– 当 i≠1时,N+(i-1)h≠N和 N+(i-1)f≠N中至少有一个成立。
– uviwxiy=aN+(i-1)hbN+(i-1)fcN?L。
2009-7-26 674
8.1 上下文无关语言的泵引理
⑵ v=bh,x=cf,h+f≥1。
uviwxiy=aNbN+(i-1)h cN+(i-1)f
– 当 i≠1时,N+(i-1)h≠N和 N+(i-1)f≠N中至少有一个成立 。
– uviwxiy=aNhbN+(i-1)cN+(i-1)f?L。
这些都与泵引理矛盾,所以,L不是 CFL。
2009-7-26 675
8.1 上下文无关语言的泵引理
例 8-2 证明 L={anbmcndm|n,m≥1}不是 CFL。
证明:
取 z= aNbNcNdN
v=ah,x=bf; v=bh,x=cf; v=ch,x=df,
h+f≥1等 4种情况。
2009-7-26 676
8.1 上下文无关语言的泵引理
设 v=ah,x=bf,并且 h+f≥1
uviwxiy=aN+(i-1)hbN+(i-1)fcNdN
当 i≠1时,N+(i-1)h≠N和 N+(i-1)f≠N至少有一个成立 。
uviwxiy=aN+(i-1)hbN+(i-1)fcNdN?L
2009-7-26 677
8.1 上下文无关语言的泵引理
同理可以证明,当 v=bh,x=cf或者 v=ch、
x=df,h+f≥1时,
uviwxiy=aN+(i-1)hbN+(i-1)fcNdN?L
对 i≠1成立。
由泵引理,L不是 CFL。
2009-7-26 678
8.1 上下文无关语言的泵引理
L={anbmck|n≠m,m≠k,k≠n} 是 CFL么?
取 z=aNbN+ncN+m其中,n≠m,n≠0,m≠0。
只能让 v或者 x由若干个 a组成,才有可能随着 i的变化,使得 uviwxiy中 a的个数与 b的个数或者 c的个数相同。
当 v=ak,x=bh( N≥k≥1),显然,只要令 k=h,就能保证对于任意的 i,uviwxiy中字符 a的个数永远不能等于字符 b的个数。
希望 uviwxiy中字符 a的个数等于字符 c的个数 。
2009-7-26 679
8.1 上下文无关语言的泵引理
想办法保证在 N≥k≥1的条件下,总能找到一个 i,使得 uviwxiy中字符 a的个数能够等于 c
的个数。
在 uviwxiy中,字符 a的个数为 N+(i-1)k,而 c
的个数为 N+m,即,N+(i-1)k=N+m。
从而要求,无论 k取 N到 1的任何一个值,
i=m/k+1必须是一个整数 。
2009-7-26 680
8.1 上下文无关语言的泵引理
取 z=aNbN+N!cN+2N!
v=ak,x=bh,N≥k≥1
当 i= 2N!/k+1时,有
uviwxiy=aN+(i-1)kbN+N!+(i-1)hcN+2N!
= aN+(2N!/k+1-1)kbN+N!+(2N!/k+1-1)hcN+2N!
= aN+(2N!/k)kbN+N!+(2N!/k)hcN+2N!
= aN+2N!bN+N!+(2N!/k)hcN+2N!
uviwxiy= aN+2N!bN+N!+(2N!/k)hcN+2N!?L。
2009-7-26 681
8.1 上下文无关语言的泵引理
问题:当取 v=bk,x=ch,N≥k≥1,时,我们就无法在找到矛盾了。
我们必须把目标锁定在 a上!
因为这能保证找出“矛盾”!
所以我们实在是对 a太“感兴趣”了!
称这些令我们感兴趣的字符为 特异点
(distinguished position)。
2009-7-26 682
8.1 上下文无关语言的泵引理
?是否可以要求 v和 x中必须含有 a。
这样必须修改原有的泵引理!
定义 z的语法树满足下列条件的非叶子结点为 分支点 (branch point):该结点有两个儿子,并且它的这两个儿子均有特异点后代。
2009-7-26 683
8.1 上下文无关语言的泵引理引理 8-2 ( Ogden引理) 对于任意的 CFL L,
存在仅仅依赖于 L的正整数 N,对于任意的
z∈ L,当 z中至少含有 N个特异点时,存在 u,
v,w,x,y,使得 z=uvwxy,同时满足,
(1) |vwx|中特异点的个数 ≤N;
(2) |vx|中特异点的个数 ≥1;
(3) 对于任意的非负整数 i,uviwxiy∈ L。
2009-7-26 684
8.1 上下文无关语言的泵引理
证明要点:
( 1) 与 CFL的泵引理的证明类似。
( 2) 用 CNF作为 CFL的描述工具。
( 3) 取 N= 2|V|+1。
( 4) 构造从树根到叶子的含有最多分支点的路径 p。参考图 8-2。
2009-7-26 685
8.1 上下文无关语言的泵引理图 8-2 z的派生树
2009-7-26 686
8.1 上下文无关语言的泵引理其中:
结点 v1左边的所有叶子结点的标记从左到右构成的字符串为 u;
结点 v1的为根的子树中 v2左边的所有叶子结点的标记从左到右构成的字符串为 v;
结点 v2为根的子树的结果为 w;
结点 v1的为根的子树中 v2右边的所有叶子结点的标记从左到右构成的字符串为 x;
结点 v1右边的所有叶子结点的标记从左到右构成的字符串为 y;
2009-7-26 687
8.1 上下文无关语言的泵引理
( 5) p中至少有 |V|+1个分支点,在这些分支结点中,至少有两个不同的结点标记有相同的变量 A。
( 6) 仍然参照图 8-2,p中最接近叶子的且都标有相同的语法变量 A的两个分支结点为 v1,v2。
( 7) S?* uAy?+ uvAxy?+ uvwxy=z。 vwx
中最多有 N个特异点,vx至少有 1个特异点 。
( 8) 对于任意的非负整数 i,S?* uAy?+
uviAxiy?+uviwxiy。
2009-7-26 688
8.1 上下文无关语言的泵引理
例 8-3证明 L={anbmchdj|n=0或者 m=h=j}不是 CFL。
取 z=abNcNdN
⑴ v=a,x=bk,k≠0
此时 uv2wx2y=aabN+kcNdN?L;
⑵ v=bk,x=cg,k≠0,g≠0
此时 uv2wx2y=abN+kcN+gdN?L;
⑶ v=bk,x=dg,k≠0,g≠0
此时 uv2wx2y=aabN+kcNdN+g?L;
与 Ogden引理矛盾,所以,L不是 CFL。
2009-7-26 689
8.2 CFL的封闭性定理 8-1 CFL 在并、乘积、闭包运算下是封闭的。
证明要点:
令 CFG
–G1=(V1,T1,P1,S1),L(G1)=L1,
–G2=(V2,T2,P2,S2),L(G2)=L2,
–V1∩V2=Φ,且 S3,S4,S5?V1∪ V2。
2009-7-26 690
8.2 CFL的封闭性
G3=(V1∪ V2∪ {S3},T1∪ T2,P1∪ P2∪ { S3?S1|S2},S3)
G4=(V1∪ V2∪ {S4},T1∪ T2,P1∪ P2∪ { S4?S1S2},S4)
G5=(V1∪ {S5},T1,P1∪ { S5?S1S5|ε},S5)
显然,G3,G4,G5都是 CFG,并且
L(G3)=L1∪ L2
L(G4)= L1L2
L(G5)= L1*
2009-7-26 691
8.2 CFL的封闭性定理 8-2 CFL 在交运算下不封闭的。
证明要点:
设 L1={0n1n2m|n,m≥1},L2={0n1m2m|n,m≥1}。
G1,S1?AB
A?0A1|01
B?2B|2
G2,S?AB
A?0A|0
B?1B2|12
2009-7-26 692
8.2 CFL的封闭性
显然,L(G1)=L1,L(G2)=L2 。
L= L1∩L2={0n1n2n|n≥1}不是 CFL。
所以,CFL在交运算下是不封闭的。
2009-7-26 693
8.2 CFL的封闭性推论 8-1 CFL在补运算下是不封闭的。
证明要点:
由于 CFL对并运算的封闭性、对交运算的不封闭性和下列式子,可以得出 CFL对补运算是不封闭的结论。
212121 LLLLLL
2009-7-26 694
8.2 CFL的封闭性定理 8-3 CFL与 RL的交是 CFL。
证明:
( 1)构造设 PDA M1=(Q1,∑,Γ,δ1,q01,Z0,F1)
L1=L(M1)
DFA M2=(Q2,∑,δ2,q02,F2)
L2=L(M2)
2009-7-26 695
8.2 CFL的封闭性
取 PDA M=(Q1× Q2,∑,Γ,δ,[q01,q02],
Z0,F1× F2)
对?([q,p],a,Z)∈ (Q1× Q2)× (∑∪ {ε})× Γ
δ([q,p],a,Z)={([q′,p′],γ) | (q′,
γ)∈ δ1(q,a,Z) 且 p′=δ(p,a)}
可以用下图标是构造的基本思想。
2009-7-26 696
8.2 CFL的封闭性
2009-7-26 697
8.2 CFL的封闭性
① M使用的栈就是 M1的栈。
② M的状态包括两个分量:一个为 M1的状态,
用来使 M的动作能准确地模拟 M1的动作;
另一个为 M2的状态,用来使 M的动作能准确地模拟 M1的动作。
③ 当 M1执行 ε-移动时,M2不执行动作。
2009-7-26 698
8.2 CFL的封闭性
(2) 证明构造的正确性。
施归纳于 n证明:
([q01,q02],w,Z0) ├Mn ([q,p],ε,γ)
(q01,w,Z0) ├M1n (q,ε,γ) &δ(q02,w) =p
再注意到 [q,p]∈ F1× F2?q∈ F1 & p∈ F2
这就是说,对于?x∈ ∑*,
x∈ L(M)? x∈ L(M1) & x∈ L(M2)
所以,
L(M)=L(M1)∩L(M2)
2009-7-26 699
8.2 CFL的封闭性
根据本定理证明中给出的方法,可以用 N个正则语言 L1,L2,…,LN的识别器 (DFA)的有穷状态控制器构成这 N个正则语言的交的识别器 (DFA):
M∩=(Q1× Q2× … × QN,∑,δ,[q10,
q20,…,qN0],F1× F2× … × FN)
2009-7-26 700
8.2 CFL的封闭性定理 8-4 CFL在代换下是封闭的 。
① CFG G=(V,T,P,S),使得 L=L(G)。对于?a∈ T,f(a)是 ∑上的 CFL,且 CFG
Ga=(Va,∑,Pa,Sa),使得 f(a)=L(Ga)。
② f(a)的所有句子都是由 Sa派生出来的,所以,
构造的基本思想是用 Sa替换产生 L的 CFG的产生式中出现的终极符号 a。
2009-7-26 701
8.2 CFL的封闭性
③ 产生 f(L)的文法
),',,(' SPPVVG
Ta
a
Ta
a?
},,
|{'
21
21
iXiiii
n
n
SAXAVX
PXXXA
AAAAP
否则则如果且?
2009-7-26 702
8.2 CFL的封闭性
④ 证明 L(G′)=f(L)
设 x∈ L(G′),从而
S?*G′SaSb… Sc
+G′xaSb… Sc
+G′xaxb… Sc
…
+G′xaxb… xc
=x
Sa,Sb,…,Sc∈ {Sd |
d∈ T}。 且
Sa?*G′ xa
Sb?*G′ xb
…
Sc?*G′ xc
2009-7-26 703
8.2 CFL的封闭性由 G′的定义知,
S?*G′SaSb… Sc? S?*G ab… c
并且,对于?d∈ T,Sd?*G′ xd? Sd?*Gd xd
所以,ab… c∈ L,xa∈ L(Ga),xb∈ L(Gb),…,
xc∈ L(Gc)
故,x= xaxb… xc=f(a)f(b)… f(c)=f(ab… c)
即,x∈ f(L)。 从而 L(G′)?f(L)
用类似的方法,不难证明 f(L)?L(G′)。
综上所述,定理得证 。
2009-7-26 704
8.2 CFL的封闭性推论 8-2 CFL的同态像是 CFL。
注意到对任意的 CFG G=(V,T,P,S),
L=L(G)。对于?a∈ T,|f(a)|=1,所以它是
∑上的 CFL,根据这个定理,得到此推论。
2009-7-26 705
8.2 CFL的封闭性定理 8-5 CFL L的同态原像是 CFL。
基本思路:
① 描述工具 PDA。
② PDA M2=(Q2,∑2,Γ,δ2,q0,Z0,F)接受
L
③ 设 T={ a1,a2,…,an}根据 f(a1)=x1,
f(a2)=x2,…,f(an)=xn,M1有穷控制器中的缓冲区存放 f(a1),f(a2),…,f(an)的任一后缀。
2009-7-26 706
8.2 CFL的封闭性
④ 对于任意的 x∈ ∑1*,设 x=b1b2… bn,M1是否接受
x,完全依据于 M2是否接受 f(b1)f(b2)… f(bn)。
⑤ M1的形式定义为
M1=(Q1,∑1,Γ,δ1,[q0,ε],Z0,F× {ε})
Q1={[q,x] | q∈ Q2,存在 a∈ ∑1,x是 f(a)的后缀 }
当 M1扫描到 a∈ ∑1时,将 f(a)存入有穷控制器,
([q,f(a)],A) ∈ δ1([q,ε],a,A)
2009-7-26 707
8.2 CFL的封闭性然后,M1模拟 M2处理存在缓冲区中的 f(a)。
M1用 ε-移动模拟 M2的非 ε-移动:
(p,γ)∈ δ2(q,a,A),?
([p,x],γ)∈ δ1([q,ax],ε,A)
M1用 ε-移动模拟 M2的 ε-移动
(p,γ)∈ δ2(q,ε,A),?
([p,x],γ)∈ δ1([q,x],ε,A)
2009-7-26 708
图 8-4 M的构造示意图
2009-7-26 709
8.2 CFL的封闭性
构造的正确性证明。
证明 x=a1a2…a n∈ L(M1)的充分必要条件是
f(a1)f(a2)…f(a n) ∈ L(M2),这里的关键是对状态“接续”的理解。也就是
2009-7-26 710
8.2 CFL的封闭性成立的充分必要条件为:
([qi,ε],ai…a n,γi) ├M1 ([qi,f(ai)],ai+1…a n,γi)
([qi,f(ai)],ai+1…a n,γi) ├M1* ([qi+1,ε],ai…a n,γi+1)
(q0,f(a1)f(a2)… f(an),Z0)├M2* (q1,f(a2)… f(an),γ1)
(qi,f(ai)…f(a n),γi) ├M2* (qi+1,f(ai+1)…f(a n ),γi+1)
2009-7-26 711
8.3 CFL的判定算法
不存在判断算法的问题:
① CFG G,是不是二义性的?
② CFL L的补是否确实不是 CFL?
③ 任意两个给定 CFG是等价的么?
存在判断算法的问题:
④ L是非空语言么?
⑤ L是有穷的么?
⑥ 一个给定的字符串 x是 L的句子么?
2009-7-26 712
8.3.1 L空否的判定
基本思想:
设 L为一个 CFL,则存在 CFG G,使得 L(G)=L。由算法 6-1,我们可以求出等价的 CFG G′,G′中不含派生不出终极符号行的变量。显然,如果 NEWV中包含 G的开始符号,则 L就是非空的。否则,L就是空的。因此,通过改造算法 6-1,我们可得到判定 L是否为空的算法 8-1。
2009-7-26 713
8.3.1 L空否的判定算法 8-1 判定 CFL L是否为空 。
输入,CFG G=(V,T,P,S)。
输出,G是否为空的判定; CFG G′=(V′,T,
P′,S),V′中不含派生不出终极符号行的变量,并且有 L(G′)=L(G)。
主要步骤:
(1) OLDV=Φ;
(2) NEWV={A|A?w∈ P且 w∈ T*}
2009-7-26 714
8.3.1 L空否的判定
(3) while OLDV≠NEWV do
begin
(4) OLDV=NEWV;
(5) NEWV=OLDV∪ {A?α∈ P且
α∈ (T∪ OLDV) *};
end
(6) V′=NEWV;
(7) P′={ A?α| A?α∈ P且 A∈ V′且
α∈ (T∪ V′)*};
(8) if S∈ NEWV then L(G)非空 else L(G)为空
2009-7-26 715
8.3.2 L是否有穷的判定
可派生性图表示 (Derivability Graph of G——DG)
设 CFG G=(V,T,P,S),G的 可派生性图表示 是满足下列条件的有向图:
(1) 对于?X∈ V∪ T,图中有且仅有一个标记为 X
的顶点;
(2) 如果 A?X1X2… Xn∈ P,则图中存在从标记为 A
的顶点分别到标记为 X1,X2,…,Xn的弧;
(3) 图中只有满足条件 1和 2的顶点和弧 。
2009-7-26 716
8.3.2 L是否有穷的判定
G的可派生性图表示中,任意两个顶点之间最多有一条相同方向的弧。
G的可派生性图表示表达了文法 G中的语法变量之间的派生关系。
派生 A?+αAβ存在的充分必要条件是 G的可派生性图表示中存在一条从标记为 A的顶点到标记为 A的顶点的长度非 0的有向回路。
2009-7-26 717
8.3.2 L是否有穷的判定定理 8-6 设 CFG G=(V,T,P,S)不含无用符号,L(G)为无穷语言的充分必要条件是 G的可派生性图表示中存在一条有向回路。
证明要点:
对应某一条有向回路,寻找一条从 S出发,到达此回路的路,可以构造出下列形式的派生
S?+γAρ?+γαAβρ
从而对任意的非负整数 i,
S?+γAρ?+γαiAβiρ
2009-7-26 718
8.3.2 L是否有穷的判定
DG中标记为终极符号的结点是无用的
简化的可派生性图表示 (simplified
derivability graph of G,SDG )
设 CFG G=(V,T,P,S),G的 简化的可派生性图表示 是从 G的可派生性图表示中删除所有标记为终极符号的顶点后得到的图 。
2009-7-26 719
8.3.2 L是否有穷的判定定理 8-7 设 CFG G=(V,T,P,S)不含无用符号,L(G)为无穷语言的充分必要条件是 G
的简化的可派生性图表示中存在一条有向回路 。
证明:与定理 8-6的证明类似。
2009-7-26 720
8.3.2 L是否有穷的判定算法 8-2 判定 CFL L是否为无穷语言 。
输入,CFG G=(V,T,P,S)。
输出,G是否为无穷的判定; CFG G′=(V′,
T,P′,S),V′中不含派生不出终极符号行的变量,并且有 L(G′)=L(G)。
2009-7-26 721
8.3.2 L是否有穷的判定
(1) 调用算法 6-1,6-2;
(2) if S?V′ then L(G)为有穷的语言
else
begin
(3) 构造 G′的简化的可派生性图表示 SDG;
(4) if SDG中含有回路 then L(G′)为无穷语言
(5) else L(G′)为有穷有语言 。
end
2009-7-26 722
8.3.3 x是否为 L的句子的判定
判断 x是否为给定文法生成的句子的根本方法是看
G能否派生出 x。一种最简单的算法是用穷举法,
这种方法又称为“试错法”,是“带回溯”的,所以效率不高。其时间复杂度为串长的指数函数。
典型的自顶向下的分析方法:递归子程序法、
LL(1)分析法、状态矩阵法等。
典型的自底向上的分析方法,LR分析法、算符优先分析法。
这些基本的方法均只可以分析 CFG的一个真子类。
2009-7-26 723
8.3.3 x是否为 L的句子的判定
CYK算法的基本思想是从 1到 |x|,找出 x的相应长度的子串的派生变量,效率较高的根本原因是它在求 x的长度为 i的子串 y的
“派生变量”时,是根据相应的 CNF中的形如 A?BC的产生式,使用已经求出的 B是
y的前缀的“派生变量”,而 C是相应的后缀的“派生变量”的结果。
2009-7-26 724
8.3.3 x是否为 L的句子的判定算法 8-3 CYK算法。
输入,CNF G=(V,T,P,S),x;
输出,x∈ L(G)或者 x?L(G);
主要数据结构:
– 集合 Vi,j——可以派生出子串 xi,k的变量的集合。
这里,xi,k表示 x的从第 i个字符开始的,长度为
k的字串。
2009-7-26 725
8.3.3 x是否为 L的句子的判定
(1) for i=1 to |x| do
(2) Vi,1={A|A?xi,1∈ P};
(3) for k=2 to |x| do
(4) for i=1 to |x|-k+1 do
begin
(5) Vi,k=Φ;
(6) for j=1 to k-1 do
(7) Vi,k= Vi,k∪ {A | A?BC∈ P且 B∈ Vi,j且
C∈ Vi+j,k-j};
end
2009-7-26 726
8.3.3 x是否为 L的句子的判定其中:语句 (1)和 (2)完成长度为 1的子串的派生变量的计算。其时间复杂度为 |P|。语句 (3)控制算法依次完成长度是 2,3,…,|x|的子串的派生变量的计算;语句 (4)控制完成对于串 x中的所有长度为 k
的子串的派生变量的计算。这里的计算顺序依次为从第 1个字符开始的长度为 k的子串、从第 2个字符开始的长度为 k的子串,…,从第 |x|-k+1个字符开始的长度为 k的子串。语句 (6)控制实现长度为 k
的子串的不同切分方式下的派生的可能性。
2009-7-26 727
8.4 小结本章讨论了 CFL 的性质和 CFL的一些判定问题 。
(1) 泵引理:与 RL的泵引理类似,CFL的泵引理用来证明一个语言不是 CFL。 它不能证明一个语言是 CFL,而且也是采用反证法 。 Ogden引理是对泵引理的强化,它可以使我们将注意力集中到所给字符串的那些令我们感兴趣的地方 ——特异点 。
2009-7-26 728
8.4 小结
(2) CFL 在并、乘、闭包、代换、同态映射、
逆同态映射等运算下是封闭的。
(3) CFL在交、补运算下是不封闭。
(4) 存在判定 CFG产生的语言是否为空、是否有穷、是否无穷,以及一个给定的符号串是否为该文法产生的语言的一个句子的算法。
2009-7-26 729
第 9章 图灵机
图灵机 (Turing machine)是由图灵 (Alan
MathisomTuring)在 1936年提出的,它是一个通用的计算模型 。
通过研究 TM,来研究 递归可枚举集
(recursively enumerable set)和 部分地归函数 (partial recursive function)。
对算法和可计算性进行研究提供形式化描述工具。
2009-7-26 730
第 9章 图灵机
有效过程 (effective procedure)与 算法
(algorithm)。
希尔伯特纲领。
1931年,奥地利 25岁的数理逻辑学家哥德尔 (Kuri
G?del)发表了著名的不完整性理论。
具有有穷描述的过程是可数无穷多的,但函数却是不可数无穷多的。
世界上存在着许多的问题和函数,是无法用具有有穷描述的过程完成计算的 ——是 不可计算的
(incomputable) 。
2009-7-26 731
第 9章 图灵机
主要内容
– TM作为一个计算模型,它的基本定义,即时描述,TM接受的语言; TM的构造技术; TM
的变形; Church-Turing论题;通用 TM。 可计算语言,不可判定性,P-NP问题 )。
重点
– TM的定义,TM的构造 。
难点
– TM的构造。
2009-7-26 732
9.1 基本概念
图灵提出 TM具有以下两个性质
– 具有有穷描述。
– 过程必须是由离散的、可以机械执行的步骤组成。
基本模型包括
– 一个有穷控制器。
– 一条含有无穷多个带方格的输入带。
– 一个读头。
2009-7-26 733
9.1 基本概念
一个移动将完成以下三个动作:
–改变有穷控制器的状态;
–在当前所读符号所在的带方格中印刷一个符号;
–将读头向右或者向左移一格 。
2009-7-26 734
直观物理模型
2009-7-26 735
9.1.1 基本 TM
图灵机 (Turing machine)/基本的图灵机
TM M=(Q,∑,Γ,δ,q0,B,F),
Q为状态的有穷集合,?q∈ Q,q为 M的一个 状态 ;
q0∈ Q,是 M的 开始状态,对于一个给定的输入串,M从状态 q0启动,读头正注视着输入带最左端的符号;
2009-7-26 736
9.1.1 基本 TM
F?Q,是 M的 终止状态集,?q∈ F,q为 M
的一个终止状态。与 FA和 PDA不同,一般地,一旦 M进入终止状态,它就停止运行。
Γ为 带符号表 (tape symbol),?X∈ Γ,X为
M的一个带符号,表示在 M的运行过程中,
X可以在某一时刻出现在输入带上;
2009-7-26 737
9.1.1 基本 TM
B∈ Γ,被称为 空白符 (blank symbol),含有空白符的带方格被认为是空的;
∑?Γ-{B}为 输入字母表,?a∈ ∑,a为 M的一个输入符号。除了空白符号 B之外,只有
∑中的符号才能在 M启动时出现在输入带上;
2009-7-26 738
9.1.1 基本 TM
δ,Q× Γ?Q× Γ× {R,L},为 M的 移动函数 (transaction function)。
δ(q,X)=(p,Y,R)表示 M在状态 q读入符号 X,
将状态改为 p,并在这个 X所在的带方格中印刷符号 Y,然后将读头向右移一格;
δ(q,X)=(p,Y,L)表示 M在状态 q读入符号
X,将状态改为 p,并在这个 X所在的带方格中印刷符号 Y,然后将读头向左移一格。
2009-7-26 739
9.1.1 基本 TM
例 9-1 设 M1=({q0,q1,q2},{0,1},{0,1,
B},δ,q0,B,{q2}),其中 δ的定义如下,对于此定义,也可以用表 9-1表示。
δ(q0,0)= (q0,0,R)
δ(q0,1)= (q1,1,R)
δ(q1,0)= (q1,0,R)
δ(q1,B)= (q2,B,R)
2009-7-26 740
9.1.1 基本 TM
0 1 B
q0 (q0,0,R) (q1,1,R)
q1 (q1,0,R) (q2,B,R)
q2
2009-7-26 741
9.1.1 基本 TM
即时描述 (instantaneous description,ID)
α1α2∈ Γ*,q∈ Q,α1qα2称为 M的 即时描述
– q为 M的当前状态。
– α1α2为 M的输入带最左端到最右的非空白符号组成的符号串或者是 M的输入带最左端到 M的读头注视的带方格中的符号组成的符号串
– M正注视着 α2的最左符号。
2009-7-26 742
9.1.1 基本 TM
设 X1X2…X i-1qXiXi+1…X n是 M的一个 ID
如果 δ(q,Xi)=(p,Y,R),则,M的下一个 ID为
X1X2… Xi-1YpXi+1… Xn
记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… Xi-1YpXi+1… Xn
– 表示 M在 ID X1X2… Xi-1qXiXi+1… Xn下,经过一次移动,将 ID变成 X1X2… Xi-1YpXi+1… Xn 。
2009-7-26 743
9.1.1 基本 TM
如果 δ(q,Xi)=(p,Y,L)则,
– 当 i≠1时,M的下一个 ID为
X1X2…pX i-1YXi+1…X n
记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… pXi-1YXi+1… Xn
– 表示 M在 ID X1X2…X i-1qXiXi+1…X n下,经过一次移动,将 ID变成 X1X2…pX i-1YXi+1…X n;
2009-7-26 744
9.1.1 基本 TM
├M是 Γ*QΓ*× Γ*QΓ*上的一个二元关系
– ├Mn表示 ├M的 n次幂,├Mn =(├M)n
– ├M+表示 ├M的正闭包,├M+=(├M)+
– ├M*表示 ├M的克林闭包,├M*=(├M)*
在意义明确时,分别用 ├,├n,├+,├*表示 ├M,├Mn,├M+,├M*。
2009-7-26 745
9.1.1 基本 TM
例 9-2 例 9-1所给的 M1在处理输入串的过程中经历的 ID变换序列。
( 1)处理输入串 000100的过程中经历的 ID的变换序列如下:
q0000100├M 0q000100├M 00q00100
├M 000q0100├M 0001q100├M 00010q10
├M 000100 q1├M 000100Bq2
2009-7-26 746
9.1.1 基本 TM
( 2)处理输入串 0001的过程中经历的 ID变换序列如下:
q00001├M 0q0001├M 00q001
├M 000q01├M 0001q1├M 0001Bq2
( 3)处理输入串 000101的过程中经历的 ID变换序列如下:
q0000101├M 0q000101├M 00q00101
├M 000q0101├M 0001q101├M 00010q11
2009-7-26 747
9.1.1 基本 TM
( 4)处理输入串 1的过程中经历的 ID变换序列如下:
q01├M 1q1├M 1Bq2
( 5)处理输入串 00000的过程中经历的 ID变换序列如下:
q000000├M 0q00000├M 00q0000
├M 000q000├M 0000 q00├M 00000q0B
2009-7-26 748
9.1.1 基本 TM
TM接受的语言
L(M)={x | x∈ ∑* & q0x├M* α1 qα2 & q∈ F &α1、
α2∈ Γ*}
TM接受的语言叫做 递归可枚举语言 (recursively
enumerable language,r.e.)。
如果存在 TM M=(Q,∑,Γ,δ,q0,B,F),L=L(M),
并且对每一个输入串 x,M都停机,则称 L为 递归语言 (recursively language)。
2009-7-26 749
9.1.1 基本 TM
例 9-3 设有 M2=({q0,q1,q2,q3},{0,1},{0,1,
B},δ,q0,B,{q3}),其中 δ的定义如下:
δ(q0,0)= (q0,0,R)
δ(q0,1)= (q1,1,R)
δ(q1,0)= (q1,0,R)
δ(q1,1)= (q2,1,R)
δ(q2,0)= (q2,0,R)
δ(q2,1)= (q3,1,R)
2009-7-26 750
9.1.1 基本 TM
0 1 B
q0 (q0,0,R) (q1,1,R)
q1 (q1,0,R) (q2,1,R)
q2 (q2,0,R) (q3,1,R)
q3
2009-7-26 751
9.1.1 基本 TM
为了弄清楚 M2接受的语言,需要分析它的工作过程。
( 1)处理输入串 00010101的过程中经历的 ID
变换序列如下:
q000010101├ 0q00010101├ 00q0010101
├ 000q010101├ 0001q10101├ 00010q1101
├ 000101 q201├000101 0 q21├ 00010101q3
2009-7-26 752
9.1.1 基本 TM
M2在 q0状态下,遇到 0时状态仍然保持为 q0,
同时将读头向右移动一格而指向下一个符号;
在 q1状态下遇到第一个 1时状态改为 q1,并继续右移读头,以寻找下一个 1;在遇到第二个 1时,动作类似,只是将状态改为 q2;
当遇到第三个 1时,进入终止状态 q3,此时它正好扫描完整个输入符号串,表示符号串被 M2接受。
2009-7-26 753
9.1.1 基本 TM
( 2)处理输入串 1001100101100的过程中经历的 ID变换序列如下:
q01001100101100├1q1001100101100
├10 q101100101100├100q11100101100
├ 1001 q2100101100├10011q300101100
M2遇到第三个 1时,进入终止状态 q3,输入串的后缀 00101100还没有被处理。但是,
由于 M2已经进入终止状态,表示符号串
1001100101100被 M2接受
2009-7-26 754
9.1.1 基本 TM
( 3)处理输入串 000101000的过程中经历的 ID变换序列如下:
q0000101000├0q000101000├00q00101000
├ 000q0101000├0001q101000├00010q11000
├ 000101q2000├0001010 q200├ 00010100 q20
├ 000101000 q2B
当 M2的 ID变为 000101000q2B时,因为无法进行下一个移动而停机,不接受输入串 000101000。
2009-7-26 755
9.1.1 基本 TM
M2接受的语言是字母表 {0,1}上那些至少含有 3个 1的 0,1符号串。请读者考虑,如何构造出接受字母表 {0,1}上那些含且恰含有 3个 1的符号串的 TM。
2009-7-26 756
9.1.1 基本 TM
例 9-4 构造 TM M3,使 L(M)={0n1n2n | n≥1}。
分析:
– 不能通过“数” 0,1、或者 2的个数来实现检查。
– 最为原始的方法来比较它们的个数是否是相同的:
消除一个 0、然后消除一个 1,最后消除一个 2。
– 消除的 0的带方格上印刷一个 X,在消除的 1的带方格上印刷一个 Y,在消除的 2的带方格上印刷一个
Z。
2009-7-26 757
9.1.1 基本 TM
–正常情况下,输入带上的符号串的一般形式为
00… 0011… 1122… 22
–TM启动后,经过一段运行,输入带上的符号串的一般情况为
X… X0… 0Y… Y1… 1Z… Z2… 2BB
–需要给予边界情况密切的关注。
2009-7-26 758
9.1.1 基本 TM
边界情况
X… XX… XY… YY… YZ… Z2… 2BB
X… XX… XY… Y1… 1Z… Z2… 2BB
X… X0… 0Y… YY… YZ… Z2… 2BB
X… X0… 0Y… Y1… 1Z… ZZ… ZBB
X… X0… 0Y… YY… YZ… ZZ… ZBB
2009-7-26 759
构造思路
2009-7-26 760
移动函数
0 1 2 X Y Z B
q0 (q0,X,R) (q4,Y,R)
q1 (q1,0,R) (q2,Y,R) (q1,Y,R)
q2 (q2,1,R) (q3,Z,L) (q2,Z,R)
q3 (q3,0,L) (q3,1,L) (q0,X,R) (q3,Y,L) (q3,Z,L)
q4 (q4,Y,R) (q4,Z,R) (q5,B,R)
q5
2009-7-26 761
9.1.2 TM作为非负整函数的计算模型
非负整数进行编码 —— 1进制
– 用符号串 0n表示非负整数 n。
用符号串表示 k元函数 f(n1,n2,…,n k)的输入。
如果 f(n1,n2,…,n k)=m,则该 TM的输出为 0m 。
knnn 101100 21?
2009-7-26 762
9.1.2 TM作为非负整函数的计算模型
图灵可计算的 (Turing computable)
设有 k元函数 f(n1,n2,…,n k)=m,TM M=(Q,
∑,Γ,δ,q0,B,F)接受输入串输出符号串 0m;当 f(n1,n2,…,n k)无定义时,
TM M没有恰当的输出给出。称 TM M计算 k
元函数 f(n1,n2,…,n k),也称 f(n1,n2,…,n k)为
TM M计算的函数。也称 f是 图灵可计算的。
knnn 101100 21?
2009-7-26 763
9.1.2 TM作为非负整函数的计算模型
完全递归函数 (total recursive function)
–设有 k元函数 f(n1,n2,…,n k),如果对于任意的 n1,n2,…,n k,f均有定义,也就是计算 f的
TM总能给出确定的输出,则称 f为 完全递归函数。
部分递归函数 (partial recursive function)
–TM计算的函数称为 部分递归函数。
2009-7-26 764
9.1.2 TM作为非负整函数的计算模型
例 9-5 构造 TM M4,对于任意非负整数 n,m,
M4计算 m+n。
分析,M4的输入为 0n10m,输出 0n+m的符号串 。 n
和 m为 0的情况需要特殊考虑 。
( 1) 当 n为 0时,只用将 1变成 B就完成了计算,此时无需考察 m是否为 0;
( 2) 当 m为 0时,需要扫描过表示 n的符号 0,并将 1
改为 B。
( 3) 当 n和 m都不为 0时,我们需要将符号 1改为 0,
并将最后一个 0改为 B。
2009-7-26 765
构造思路
2009-7-26 766
M4
M4=({q0,q1,q2,q3},{0,1},{0,1,B},δ,q0,B,
{q1})
δ(q0,1)=(q1,B,R)
δ(q0,0)=(q2,0,R)
δ(q2,0)=(q2,0,R)
δ(q2,1)=(q2,0,R)
δ(q2,B)=(q3,B,L)
δ(q3,0)=(q1,B,R)
2009-7-26 767
9.1.2 TM作为非负整函数的计算模型
例 9-6 构造 TM M5,对于任意非负整数 n,
m,M5计算如下函数:
0
{
mn
mn
n≥ m
n< m
2009-7-26 768
构造思路
2009-7-26 769
M5
M5=({q0,q1,q2,q3,q4,q5,q6,},{0,1},{0,1,X,
B},δ,q0,B,{q6})
δ(q0,0 )=(q1,B,R)
δ(q0,1 )=(q5,B,R)
δ(q1,0 )=(q1,0,R)
δ(q1,1 )=(q1,1,R)
δ(q1,X )=(q2,X,R)
δ(q2,X )=(q2,X,R)
δ(q2,0 )=(q3,X,L)
δ(q2,B )=(q4,B,L)
δ(q3,X )=(q3,X,L)
δ(q3,1 )=(q3,1,L)
δ(q3,0 )=(q3,0,L)
δ(q3,B )=(q0,B,R)
2009-7-26 770
M5
δ(q4,X )=(q4,B,L)
δ(q4,1 )=(q6,0,R)
δ(q5,X )=(q5,B,R)
δ(q5,0 )=(q5,B,R)
δ(q5,B )=(q6,B,R)。
2009-7-26 771
9.1.3 TM的构造
1,状态的有穷存储功能的利用
例 9-7 构造 TM M6,使得 L(M6)={x |
x∈ {0,1}*& x中至多含 3个 1}。
分析,M6只用记录已经读到的 1的个数。
q[0]表示当前已经读到 0个 1;
q[1]表示当前已经读到 1个 1;
q[2]表示当前已经读到 2个 1;
q[3]表示当前已经读到 3个 1。
2009-7-26 772
1,状态的有穷存储功能的利用
M6=({q[0],q[1],q[2],q[3],q[f]},{0,1},
{0,1,B},δ,q[0],B,{q[f]})
δ(q[0],0 )=(q[0],0,R)
δ(q[0],1 )=(q[1],1,R)
δ(q[0],B )=(q[f],B,R)
δ(q[1],0 )=(q[1],0,R)
δ(q[1],1 )=(q[2],1,R)
δ(q[1],B )=(q[f],B,R)
δ(q[2],0 )=(q[2],0,R)
δ(q[2],1 )=(q[3],1,R)
δ(q[2],B )=(q[f],B,R)
δ(q[3],0 )=(q[3],0,R)
δ(q[3],B )=(q[f],B,R)
2009-7-26 773
1,状态的有穷存储功能的利用
TM是要接受且仅接受恰含 3个 1的 0,1串的
TM,对 M6进行修改,得到 M7
L(M7) ={x | x∈ {0,1}*& x中含且仅含 3个 1}
M7=({q[0],q[1],q[2],q[3],q[f]},{0,1},{0,1,
B},δ,q[0],B,{q[f]})
2009-7-26 774
L(M7) ={x | x∈ {0,1}*且 x中仅含 3个 1}
δ(q[0],0 )=(q[0],0,R)
δ(q[0],1 )=(q[1],1,R)
δ(q[1],0 )=(q[1],0,R)
δ(q[1],1 )=(q[2],1,R)
δ(q[2],0 )=(q2),0,R)
δ(q[2],1 )=(q[3],1,R)
δ(q[3],0 )=(q[3],0,R)
δ(q[3],B )=(q[f],B,R)
2009-7-26 775
L(M8)={x | x∈ {0,1}*& x中至少含 3个 1}
M8=({q[0],q[1],q[2],q[f]},{0,1},{0,1,B},δ,
q[0],B,{q[f]})
δ(q[0],0 )=(q[0],0,R)
δ(q[0],1 )=(q[1],1,R)
δ(q[1],0 )=(q[1],0,R)
δ(q[1],1 )=(q[2],1,R)
δ(q[2],0 )=(q[2],0,R)
δ(q[2],1 )=(q[f],1,R)
2009-7-26 776
1,状态的有穷存储功能的利用
例 9-8 构造 TM M9它的输入字母表为 {0,1},现在要求 M9在它的输入符号串的尾部添加子串 101。
分析:
– 将待添加子串 101存入穷控制器。
– 首先找到符号串的尾部。
– 将给定符号串中的符号依次地印刷在输入带上
– 每印刷一个符号,就将它从有穷控制器的“存储器”中删去,当该“存储器”空时,TM就完成了工作。
2009-7-26 777
1,状态的有穷存储功能的利用
M9=({q[101],q[01],q[1],q[ε]},{0,1},{0,1,B},
δ,q[101],B,{q[ε]})
其中 δ的定义为:
δ(q[101],0 )=(q[101],0,R)
δ(q[101],1 )=(q[101],1,R)
δ(q[101],B )=(q[01],1,R)
δ(q[01],B )=(q[1],0,R)
δ(q[1],B )=(q[ε],1,R)
2009-7-26 778
1,状态的有穷存储功能的利用
例 9-9 构造 TM M10它的输入字母表为 {0,1},要求 M10在它的输入符号串的开始处添加子串 101。
将有穷控制器中的“存储器”分成两部分
– 第一部分用来存放待添加的子串。
– 第二部分用来存储因添加符号串当前需要移动的输入带上暂时无带方格存放的子串。
– 一般形式为 q[x,y]
x待添加子串
y当前需要移动的输入带上暂时无带方格存放的子串。
2009-7-26 779
1.状态的有穷存储功能的利用
q[x,ε]为开始状态;
q[ε,ε]为终止状态。
设 a,b为输入符号
δ(q[ax,y],b) = (q[x,yb],a,R)
– 表示在没有完成待插入子串的印刷之前,要将待插入子串的首字符印刷在 TM当前扫描的带方格上。
2009-7-26 780
1,状态的有穷存储功能的利用
δ(q[ε,a y],b) = (q[ε,yb],a,R)
– 表示 当完成待插入子串的插入工作之后,必须将插入点之后的子串顺序地向后移动。
δ(q[ε,a y],B) = (q[ε,y],a,R)
– 表示读头当前所指的带方格为空白,现将“存储器”的第二部分中的当前首符号 a印刷在此带方格上,同时将这个符号从存储器中删除。
2009-7-26 781
2,多道 (multi-track)技术
例 9-10 构造 M11,使 L(M11)={xcy | x,y∈ {0,1}+ 且
x≠y}。
分析:
– 以符号 c为分界线,逐个地将 c前的符号与 c后的符号进行比较。
– 当发现对应符号不同时,就进入终止状态。
– 当发现 x与 y的长度不相同而进入终止状态。
– 发现它们相同而停机。
– 一个道存放被检查的符号串,另一个存放标记符。
2009-7-26 782
构造思路
2009-7-26 783
2,多道 (multi-track)技术
M11=({q[ε],q[0],q[1],p[0],p[1],q,p,s,f},{[B,0],
[B,1],[B,c]},{[B,0],[B,1],[B,c],[?,0],[?,1],[B,B]},
δ,q[ε],[B,B],{f})
δ(q[ε],[B,0] )=(q[0],[?,0],R)
δ(q[ε],[B,1])=(q[1],[?,1],R)
δ(q[a],[B,d])=(q[a],[B,d],R)
δ(q[a],[B,c])=(p[a],[B,c],R)
δ(p[a],[?,b])=(p[a],[?,b],R)
δ(p[a],[B,a])=(p,[?,a],L)
2009-7-26 784
2,多道 (multi-track)技术
δ(p,[?,b])=(p,[?,b],L)
δ(p,[B,c])=(q,[B,c],L)
δ(q,[B,a])=(q,[B,a],L)
δ(q,[?,a])=(q[ε],[?,a],R)
δ(p[a],[B,b])=(f,[B,b],R)
δ(p[a],[B,B])=(p,[B,B],R)
δ(s,[?,b])=(s,[?,b],R)
δ(s,[B,a])=(f,[B,a],R)
2009-7-26 785
3,子程序 (subroutine)技术
将 TM的设计看成是一种特殊的程序设计,
将子程序的概念引进来。
一个完成某一个给定功能的 TM M′从一个状态 q开始,到达某一个固定的状态 f结束。
将这两个状态作为另一个 TM M的两个一般的状态。
当 M进入状态 q时,相当于启动 M′(调用 M′
对应的子程序 );当 M′进入状态 f时,相当于返回到 M的状态 f。
2009-7-26 786
3,子程序 (subroutine)技术
例 9-11构造 M12完成正整数的乘法运算。
分析,
– 设两个正整数分别为 m和 n。
– 输入串为 0n10m 。
– 输出应该为 0n*m 。
– 算法思想:每次将 n个 0中的 1个 0改成 B,就在输入串的后面复写 m个 0。
– 在 M12的运行过程中,输入带的内容为
Bh0n-h10m10m*hB
2009-7-26 787
正整数的乘法运算
( 1)初始化。完成将第一个 0变成 B,并在最后一个 0后写上 1。我们用 q0表示启动状态,
用 q1表示完成初始化后的状态。首先,消除前 n个 0中的第一个 0,
q00n10m├+ Bq10n-110m1
( 2)主控系统。从状态 q1开始,扫描过前 n
个 0中剩余的 0和第一个 1,将读头指向 m个 0
的第一个,此时的状态为 q2。其 ID变化为
Bhq10n-h10m10m*(h-1)B ├+ Bh0n-h1 q20m10m*(h-1)B
2009-7-26 788
正整数的乘法运算
当子程序完成 m个 0的复写后,回到 q3。这个状态相当于子程序的返回(终止)状态。
然后在 q3状态下,将读头移回到前 n个 0中剩余的 0中的第一个 0,并将这个 0改成 B,
进入 q1状态,准备进行下一次循环
Bh0n-h1 q30m10m*hB ├+ Bh+1q10n-h-110m10m*hB
2009-7-26 789
正整数的乘法运算
当完成 m*n个 0的复写之后,清除输入带上除了这 m*n个 0以外的其他非空白符号。 q4
为终止状态
Bnq110m10m*nB ├+ Bn+1+m+1 q4 0m*nB
( 3) 子程序 。 完成将 m个 0复写到后面的任务 。 从 q2启动,到 q3结束,返回到主控程序 。
Bh+10n-h-11 q20m10m*hB ├+ Bh+10n-h-11 q30m10m*h+1B
2009-7-26 790
9.2 TM的变形
从不同的方面对 TM进行扩充。
– 双向无穷带 TM。
– 多带 TM。
– 不确定的 TM。
– 多维 TM等。
它们与基本的 TM等价。
2009-7-26 791
9.2.1 双向无穷带 TM
物理模型
2009-7-26 792
9.2.1 双向无穷带 TM
双向无穷带 (Turing machine with two-way
infinite tape,TM)
TM M=(Q,∑,Γ,δ,q0,B,F)
Q,∑,Γ,δ,q0,B,F的意义同定义 9-1。
M的即时描述 ID同定义9 -2。
允许 M的读头处在输入串的最左端时,仍然可以向左移动。
2009-7-26 793
9.2.1 双向无穷带 TM
M的当前 ID X1X2…X i-1qXiXi+1…X n
如果 δ(q,Xi)=(p,Y,R)
– 当 i≠1并且 Y≠B时,M的下一个 ID为
X1X2… Xi-1YpXi+1… Xn
– 记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… Xi-1YpXi+1… Xn
– 表示 M在 ID X1X2…X i-1qXiXi+1…X n下,经过一次移动,将 ID变成 X1X2…X i-1YpXi+1…X n。
2009-7-26 794
9.2.1 双向无穷带 TM
– 当 i=1并且 Y=B时,M的下一个 ID为
pX2… Xn
– 记作
qX1X2… Xn├M pX2… Xn
– 这就是说,和基本 TM在读头右边全部是 B时,
这些 B不在 ID中出现一样,当双向无穷带 TM的读头左边全部是 B时,这些 B也不在该 TM的 ID
中出现。
2009-7-26 795
9.2.1 双向无穷带 TM
如果 δ(q,Xi)=(p,Y,L)
– 当 i≠1时,M的下一个 ID为
X1X2… pXi-1YXi+1… Xn
– 记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… pXi-1YXi+1… Xn
– 表示 M在 ID X1X2…X i-1qXiXi+1… n下,经过一次移动,将 ID变成 X1X2…pX i-1YXi+1…X n 。
2009-7-26 796
9.2.1 双向无穷带 TM
– 当 i=1时,M的下一个 ID为
pBYX2… Xn
– 记作
qX1X2… Xn├M pBYX2… Xn
– 表示 M在 ID qX1X2…X n下,经过一次移动,将
ID变成 pBYX2…X n。
2009-7-26 797
9.2.1 双向无穷带 TM
定理 9-1 对于任意一个双向无穷带 TMM,存在一个等价的基本 TMM′。
证明要点:
– 双向无穷存储的模拟:用一个具有 2个道的基本 TM来模拟:一个道存放 M开始启动时读头所注视的带方格及其右边的所有带方格中存放的内容;另一个道按照相反的顺序存放开始启动时读头所注视的带方格左边的所有带方格中存放的内容 。
– 双向移动的模拟:在第 1道上,移动的方向与原来的移动方向一致,在第 2道上,移动的方向与原来的移动方向相反。
2009-7-26 798
用单向无穷带模拟双向无穷带
2009-7-26 799
9.2.2 多带 TM
多带 TM(multi-tape turing machine)
允许 TM有多个双向无穷带,每个带上有一个相互独立的读头。
k带 TM在一次移动中完成如下三个动作
⑴ 改变当前状态;
⑵ 各个读头在自己所注视的带方格上印刷一个希望的符号 。
⑶ 各个读头向各自希望的方向移动一个带方格 。
2009-7-26 800
9.2.2 多带 TM
2009-7-26 801
9.2.2 多带 TM
定理 9-2 多带 TM与基本的 TM等价。
证明要点:
对一个 k带 TM,用一条具有 2k道的双向无穷带 TMM′,实现对这个 k带 TMM的模拟。
对应 M的每一条带,M′用两个道来实现模拟。
其中一条道用来存放对应的带的内容,另一条道专门用来标记对应带上的读头所在的位置。
2009-7-26 802
9.2.3 不确定的 TM
不确定 TM与基本 TM的区别是对于任意的
(q,X)∈ Q× Γ,
δ(q,X)={(q1,Y1,D1),(q2,Y2,D2),…,
(qk,Yk,Dk)}
Dj为读头的移动方向。即 Dj∈ {R,L}。
表示 M在状态 q,读到 X时,可以有选择地进入状态 qj,印刷字符 Yj,按 Dj移动读头
L(M)={w | w∈ ∑*且 ID1├*IDn,且 IDn含 M
的终止状态 }。
2009-7-26 803
9.2.3 不确定的 TM
定理 9-3 不确定的 TM与基本的 TM等价
证明要点:
– 让等价的基本 TMM′ 具有 3条带。
– 第 1条带用来存放输入。
– 第 2条带上系统地生成 M的各种可能的移动序列
– M′在第 3条带上按照第 2条带上给出的移动系列处理输入串,如果成功,则接受之,如果不成功,则在第 2条带上生成下一个可能的移动系列,开始新一轮的“试处理”。
2009-7-26 804
9.2.4 多维 TM
多维 TM(multi-dimensional Turing machine)
– 读头可以沿着多个维移动。
k维 TM(k-dimensional Turing machine)
TM可以沿着 k维移动。
k维 TM的带由 k维阵列组成,而且在所有的
2k个方向上都是无穷的,它的读头可以向着 2k个方向中的任一个移动。
2009-7-26 805
9.2.4 多维 TM
定理 9-4 多维 TM与基本 TM等价。
用一维的形式表示 k维的内容,就像多维数组在计算机的内存中都被按照一维的形式实现存储一样。
段 (Segment)用来表是一维上的内容。
用 #作为段分割符。
¢用作该字符串的开始标志,$用作该字符串的结束标志。
2009-7-26 806
基本 TM模拟 2维 TM
B a1 a2 a3 a4 B B B B B B
B a5 B a6 a7 a8 a9 a10 B B B
B a11 B B B B a12 B a13 B a14
a15 a16 B B B B B B B B a16
B B B a17 B B B B B a18 B
a19 a20 B B B B B B B B B
B B B B B B B B B B a21
2009-7-26 807
基本 TM模拟 2维 TM
¢ Ba1a2a3a4BBBBBB # Ba5Ba6a7a8a9a10BBB #
Ba11BBBBa12Ba13Ba14 # a15 a16BBBBBBBB a16#
BBB a17BBBBBa18B # a19a20BBBBBBBBB #
BBBBBBBBBBa21$
2009-7-26 808
9.2.5 其他 TM
1,多头 TM
2,离线 TM
3,作为枚举器的 TM
4,多栈机
5,计数机
6,Church-Turing论题与随机存取机
2009-7-26 809
1,多头 TM
多头 TM(multi-head Turing machine)
指在一条带上有多个读头,它们受 M的有穷控制器的统一控制,M根据当前的状态和这多个头当前读到的字符确定要执行的移动。在 M的每个动作中,各个读头所印刷的字符和所移动的方向都可以是相互独立的 m
2009-7-26 810
1,多头 TM
定理 9-5 多头 TM与基本的 TM等价。
可以用一条具有 k+1个道的基本 TM来模拟一个具有 k个头的 TM( k头 TM)。其中一个道用来存放原输入带上的内容,其余 k个道分别用来作为 k个读头位置的标示。
2009-7-26 811
2,离线 TM
离线 TM(off-line Turing machine)
–有一条输入带是只读带 (read-only tape)的多带 TM。
符号¢和 $用来限定它的输入串存放区域,
¢在左边,$在右边。
不允许该带上的读头移出由¢和 $限定的区域 ——离线的 TM。
如果只允许只读带上的读头从左向右移动,
则称之为 在线 TM(on-line Turing machine)。
2009-7-26 812
2,离线 TM
定理 9-6 离线 TM与基本的 TM等价。
证明要点:让模拟 M的离线 TM比 M多一条带,并且用这多出来的带复制 M的输入串。
然后将这条带看作是 M的输入带,模拟 M
进行相应的处理。
2009-7-26 813
3,作为枚举器的 TM
作为枚举器的 TM(Turing machine as enumerator)
– 多带 TM,其中有一条带专门作为输出带,用来记录产生语言的每一个句子。
在枚举器中,一旦一个字符被写在了输出带上,
它就不能被更改。如果该带上的读头的正常移动方向是向右移动的话,这个带上的读头是不允许向左移动的。
如果这个语言有无穷多个句子,则它将永不停机。
它每产生一个句子,就在其后打印一个分割符
,#”。
枚举器产生的语言记为 G(M)。
2009-7-26 814
3,作为枚举器的 TM
规范的顺序 (canonical order)
定理 9-7 L为递归可枚举语言的充分必要条件是存在一个 TM M,使得 L=G(M)。
定理 9-8 一个语言 L为递归语言的充分必要条件是存在一个 TMM,使得 L=G(M),并且 L
是被 M按照规范顺序产生的。
2009-7-26 815
4,多栈机
多栈机 (multi-stack machines)是一个拥有一条只读输入带和多条存储带的不确定 TM。
– 多栈机的只读带上的读头不能左移。
– 存储带上的读头可以向左和向右移动。
右移时,一般都在当前注视的带方格上印刷一个非空白字符
左移时,必须在当前注视的带方格中印刷空白字符 B。
一个确定的 双栈机 (double stack machines)是一个确定的 TM,它具有一条只读的输入带和两条存储带。存储带上的读头左移时,只能印刷空白符号 B 。
2009-7-26 816
4,多栈机
下推自动机是一种非确定的多带 TM。它有一条只读的输入带,一条存储带。
定理 9-9 一个任意的单带 TM可以被一个确定的双栈机模拟。
2009-7-26 817
5,计数机
计数机 (counter machine)
– 有一条只读输入带和若干个用于计数的单向无穷带的离线 TM。
– 拥有 n个用于计数带的计数机被称为 n计数机 。
– 用于计数的带上仅有两种字符,一个为相当于是作为栈底符号的 Z,该字符也可以看作是计数带的首符号,它仅出现在计数带的最左端;
另一个就是空白符 B。 这个带上所记的数就是从 Z开始到读头当前位置所含的 B的个数 。
定理 9-10 TM可以被一个双计数机模拟。
2009-7-26 818
6.丘奇 -图灵 论题与随机存取机
对于任何可以用有效算法解决的问题,都存在解决此问题的 TM。
随机存取机 (random access machine,RAM)含有无穷多个存储单元,这些存储单元被按照 0,1、
2,… 进行编号,每个存储单元可以存放一个任意的整数;有穷个能够保存任意整数的算术寄存器。
这些整数可以被译码成通常的各类计算机指令。
定理 9-11如果 RAM的基本指令都能用 TM来实现,那么就可以用 TM实现 RAM。
2009-7-26 819
9.3 通用 TM
通用 TM(universal Turing machine)
– 实现对所有 TM的模拟。
编码系统
– 它可以在实现对 TM的表示的同时,实现对该
TM处理的句子的表示。
– 用 0和 1对这些除空白符以外的其他的带符号进行编码。同时也可以用 0和 1对 TM的移动函数进行编码。
2009-7-26 820
9.3 通用 TM
M=({q1,q2,…,q n},{0,1},{0,1,B},δ,q1,
B,{q2})
用 X1,X2,X3分别表示 0,1,B,用 D1、
D2分别表示 R,L。
δ(qi,Xj)=(qk,Xl,Dm)可以用 0i10j10k10l10m表示。
2009-7-26 821
9.3 通用 TM
M可用
111 code1 11 code2 11 …… 11 code r 111
codet 是动作 δ(qi,Xj)=(qk,Xl,Dm)的形如
0i10j10k10l10m的编码。
TMM和它的输入串 w则可以表示成
111 code1 11 code2 11 …… 11 code r 111w
按照规范顺序分别对表示 TM的符号行和表示输入的符号行进行排序。
2009-7-26 822
9.3 通用 TM
Ld={w | w是第 j个句子,并且第 j个 TM不接受它 }不是递归可枚举语言。
通用语言 (universal language)
– Lu={<M,w> | M接受 w}
– <M,w>为如下形式的串,表示 TMM=({q1,
q2,…,qn},{0,1},{0,1,B},δ,q1,B,{q2})和它的输入串 w。
111 code1 11 code2 11 … 11 coder 111w
2009-7-26 823
9.3 通用 TM
例 9-12 设 TM M2=({ q1,q2,q3,q4},{0,1},{0,
1,B},δ,q4,B,{q3}),其中 δ的定义如下,
δ(q4,0)= (q4,0,R)
δ(q4,1)= (q1,1,R)
δ(q1,0)= (q1,0,R)
δ(q1,1)= (q2,1,R)
δ(q2,0)= (q2,0,R)
δ(q2,1)= (q3,1,R)
2009-7-26 824
9.3 通用 TM
编码为
1110000101000010101100001001010010110
1010101011010010010010110010100101011
00100100010010111
通用 TM检查 M是否接受字符串 001101110
1110000101000010101100001001010010110
1010101011010010010010110010100101011
00100100010010111001101110
2009-7-26 825
9.4 几个相关的概念
可计算性 (computability)理论是研究计算的一般性质的数学理论。计算的过程就是执行算法的过程。
可计算理论的中心问题是建立计算的数学模型,
研究哪些是可计算的,哪些是不可计算的。
可计算理论又称为 算法理论 (algorithm theory)。
在直观意义下,算法具有有限性、机械可执行性、
确定性、终止性等特征。
可计算问题可以等同于图灵可计算问题。
2009-7-26 826
9.4 几个相关的概念
可判定的 (decidable)问题
– 它对应的语言是递归的。
不可判定的 (undecidable)
– 没有这样的算法,它以问题的实例为输入,并能给出相应的“是”与“否”的判定。
递归语言 举例
( 1) LDFA={<M,w> | M是一个 DFA,w是字符串,
M接受 w}。
( 2) LNFA={<M,w> | M是一个 NFA,w是字符串,
M接受 w}。
2009-7-26 827
9.4 几个相关的概念
( 3) LRE={<r,w> | r是一个 RE,w是字符串,w
是 r的一个句子 }。
( 4) EDFA={<M> | M是一个 DFA,且 L(M)=Φ}。
( 5) EQDFA={<M1,M2> | M1,M2是 DFA,且
L(M1)=L(M2)}。
( 6) LCFG={<G,w> | G是一个 CFG,w是字符串,
G产生 w}。
( 7) ECFG={<G> | G是一个 CFG,且 L(G)=Φ}。
2009-7-26 828
9.4 几个相关的概念
P类问题 (class of P)
– P表示确定的 TM在多项式时间 (步数 )内可判定的语言类。这些语言对应的问题成为是 P类问题,这种语言称为多项式可判定的。
– 例如,判定一个有向图中的两个顶点之间是否存在有向路的的问题、检查两个数是否互素的问题、判定一个字符串是否为一个上下文无关语言的句子的问题都是 P类问题。
2009-7-26 829
9.4 几个相关的概念
NP类问题 (class of NP)
NP表示不确定的 TM在多项式时间 (步数 )内可判定的语言类。这些语言对应的问题称为是 NP类问题,也称这些问题是 NP复杂的,
或者 NP困难的。
这种语言称为非确定性多项式可判定的。
P=NP?是理论计算机科学和当代数学中最大的悬而未决的问题之一。
2009-7-26 830
9.4 几个相关的概念
NP完全的 (NP complete problem)
– NP类中有某些问题的复杂性与整个类的复杂性相关联。如果能找到这些问题中的任何一个的多项式时间判定算法,那么,所有的 NP问题都是多项式时间可以判定的。
– TSP(旅行商问题 )。
– 划分问题。
– 可满足性问题。
– 带有先次序的调度问题。
2009-7-26 831
9.5 小结
TM是一个计算模型,用 TM可以完成的计算被称为是图灵可计算的。
(1) TM的基本概念:形式定义、递归可枚举语言、递归语言、完全递归函数、部分递归函数。
(2) 构造技术:状态的有穷存储功能的利用、
多道技术、子程序技术。
2009-7-26 832
9.5 小结
(3) TM的变形:双向无穷带 TM、多带 TM、
不确定的 TM、多维 TM、多头 TM、离线
TM、多栈 TM,它们都与基本 TM等价。
(4) Church-Turing论题:如果 RAM的基本指令都能用 TM来实现,则 RAM就可以用
TM实现。所以,对于任何可以用有效算法解决的问题,都存在解决此问题的 TM。
(5) 通用 TM可以实现对所有 TM的模拟。
(6) 可计算语言、不可判定性,P-NP问题。
2009-7-26 833
第 10章 上下文有关语言
主要内容
– TM与 PSG的等价性。
– 线性界限自动机 (LBA)。
– LBA作为 CSL的识别器。
重点
– LBA,LBA作为 CSL的识别器 。
难点
– LBA作为 CSL的识别器。
本章的内容是介绍性。
2009-7-26 834
10.1 TM与 PSG的等价性
例 10-1 构造产生语言 {0n | n为 2的非负整数次幂 }的文法 。
设计思想:
– 在文法中设置变量 C,充当 TM中的读头的作用,
它从左到右扫描 0,并且在每次遇到一个 0时,
都用 00替换之,这使得当它从最左端移到最右端时,就完成了当前串的加倍工作,为了使串中的 0再次被加倍,变量 D充当将这个,读头,
从右端移回到最左端的作用 。 为了标记出端点,
文法用 A,B分别表示串的最左端和最右端 。
2009-7-26 835
10.1 TM与 PSG的等价性
G1,S?0
产生句子 0。
S?AC0B
产生句型 AC0B,A,B分别表示左右端点,
C为向右的倍增,扫描器,。
C0?00C
C向右扫描,将每一个 0变成 00,以实现
0个数的加倍 。
2009-7-26 836
10.1 TM与 PSG的等价性
CB?DB
C到达句型的左端点,变成 D,准备进行从右到左的扫描,以实现对句型中 0的个数的再次加倍 。
CB?E
C到达句型的左端点,变成 E,表示加倍工作已完成,准备结束 。
2009-7-26 837
10.1 TM与 PSG的等价性
0D?D0 D移回到左端点 。
AD?AC
当 D到达左端点时,变成 C,此时已经做好了进行下一次加倍的准备工作 。
0E?E0 E向右移动,以寻找左端点 A。
AE?ε
E找到 A后,一同变成 ε,从而得到一个句子 。
2009-7-26 838
10.1 TM与 PSG的等价性
G2,S?AC0B
C0?00C
CB?DB
0D?D00
CB?E
AD?AC
AC?F
F0?0F
0E?E0
AE?ε
FB?ε
另一个相关的文法
2009-7-26 839
10.1 TM与 PSG的等价性定理 10-1 对于任一 PSG G=(V,T,P,S),
存在 TM M,使得 L(M)=L(G)。
证明要点:
基本思想如下 。
– M具有两条带,其中一条带用来存放输入字符串 w,
第二条带用来试着产生 w。 即,第二条带上存放的将是一个句型 。 我们希望该句型能够派生出 w。 在开始启动时,这个句型就是 S。
2009-7-26 840
10.1 TM与 PSG的等价性
设第二条带上的句型为 γ,M按照某种策略在 γ中选择为 G的某个产生式左部的子串 α,再按照非确定的方式选择 α产生式的某一个候选式 β,用 β替换 α。 在需要时,利用适当的移动技术,让 TM可以实现将句型中的 α替换成 β的工作 。
当第二条带上的内容为一个终极符号行时,就把它与第一条带上的 w进行比较,如果相等,就接受;
如果不相等,就去寻找是否存在可以产生 w的派生 。
2009-7-26 841
10.1 TM与 PSG的等价性
由于 G为 PSG,所以,在整个,试派生,过程中,我们是无法总能根据当前句型的长度来决定该派生是否需要继续进行下去 。
这样一来,对于一个给定的输入字符串,
如果它不是 L(G)的句子,我们构造的 TM可能会陷入用不停机的工作过程中 。 这从另一方面说明,短语结构语言不一定是递归语言 。
2009-7-26 842
10.1 TM与 PSG的等价性定理 10-2 对于任一 TM M,存在 PSGG=(V,T,P,
S),使得 L(G)=L(M)。
证明要点:
① 设 TM M=(Q,∑,Γ,δ,q0,B,F),L=(M)。
② 让 G可以产生 ∑*中的任意一个字符串的变形,然后让 G模拟 M处理这个字符串 。 如果 M接受它,则 G就将此字符串的变形还原成该字符串 。
③ 变形是让每个字符对应一个二元组 。[a1,a1][a2,
a2]… [an,an] ∈ (∑× ∑)*,被看成 a1a2… an的两个副本 。
2009-7-26 843
10.1 TM与 PSG的等价性
④ G在一个副本上模拟 M的识别动作,如果
M进入终止状态,则 G将句型中除另一个副本外的所有字符消去。
G=((∑∪{ ε })× Γ ∪{A 1,A2,A3}∪Q,∑,P,A 1)
(1) A1?q0A2 准备模拟 M从 q0启动;
(2) A2?[a,a]A2
a∈ ∑,A2首先生成任意的形如 [a1,
a1][a2,a2]… [an,an]的串;
2009-7-26 844
10.1 TM与 PSG的等价性
(3) A2? A3
在预生成双副本子串 [a1,a1][a2,
a2]……[a n,an]后,准备用 A3在该子串之后生成一系列的相当于空白符的子串,为 G能够顺利地模拟 M在处理相应的输入字符串的过程中,需要将读头移向输入串右侧的初始为 B的地方做准备;
2009-7-26 845
10.1 TM与 PSG的等价性
(4) A3?[ε,B] A3
由于 M在处理一个字符时,不知道将需要用到输入串右侧的多少个初始为 B的带方格,所以,我们让 A3生成一系列的相当于空白符的子串 [ε,B] [ε,B]…… [ε,B]。在派生过程中,其个数依据实际需要而定;
2009-7-26 846
10.1 TM与 PSG的等价性
(5) A3?ε
(6)?a∈∑∪ {ε },?q,p∈ Q,?X,
Y∈ Γ,如果 δ (q,X)=(p,Y,R),则
– q[a,X]?[a,Y]p
– G模拟 M的一次右移;
2009-7-26 847
10.1 TM与 PSG的等价性
(7) 对于?a,b∈∑∪ {ε },?q,p∈ Q,?X,
Y,Z∈ Γ,如果 δ (q,X)=(p,Y,L),则
– [b,Z]q[a,X]? p[b,Z] [a,Y]
– G模拟 M的一次左移;
(8) 对于?a∈∑∪ {ε },?q∈ F则
– [a,X]q?qaq G先将句型中的 [,],X等消除;
– q[a,X]?qaq
– q?ε 最后再消除句型中的状态 q
2009-7-26 848
10.2 LBA及其与 CSG的等价性
线性有界自动机 (linear bounded
automaton,LBA)
– 非确定的 TM。
– 输入字母表包含两个特殊的符号¢和 $,其中,
¢作为输入符号串的左端标志,$作为输入符号串的右端标志。
– LBA的读头只能在¢和 $之间移动,它不能在端点符号¢和 $上面打印另外一个符号。
2009-7-26 849
10.2 LBA及其与 CSG的等价性
LBA可以被看成一个八元组,
M=(Q,∑,Γ,δ,q0,¢,$,F)
其中,Q,∑,Γ,δ,q0,F与 TM中的定义相同,¢ ∈∑,$∈∑,M接受的语言
L(M)={w | w∈ (∑ -{¢,$})* &? q∈ F使得
q0¢ w$├ *¢ α qβ $。
2009-7-26 850
10.2 LBA及其与 CSG的等价性定理 10-3如果 L的 CSL,ε?L,则存在
LBA M,使得 L=L(M)。
证明要点:
① 设 CSG G=(V,T,P,S),使得 L=L(G)。 。
② 用一个两道 TM模拟 G。 一道存放字符串
¢ w$,另一道用来生成 w的推导 。
2009-7-26 851
LBA及其与 CSG的等价性
③ CSG保证只用考察长度不超过 |w|句型 。
④ 将句型的长度限制在 |w|以内,所以,M的运行不会超出符号 ¢ 和 $规定的范围 。
⑤ 对于任意输入,LBA均会停机,这表明
CSL是递归语言 。
2009-7-26 852
10.2 LBA及其与 CSG的等价性定理 10-4 对于任意 L,ε?L,存在 LBA
M,使得 L=L(M)。则 L是 CSL。
证明:与定理 10-2的证明类似,主要是根据给定的 LBA M构造出 CSG G。这里的双副本串是形如 [a1,q0¢ a1][a2,a2]…[a n,an$]的符号行,
当长度为 1时,此符号行为 [a,q0¢ a$]。
2009-7-26 853
10.2 LBA及其与 CSG的等价性
( 1) 对于?a∈∑ -{¢,$},
A1?[a,q0¢ a]A2
准备模拟 M从 q0启动,生成形如 [a1,
q0¢ a1][a2,a2]…[a n,an$]的双副本串 (句型 )
中的 [a1,q0¢ a1],并将生成子串 [a2,a2]…[a n,
an$]的任务交给 A2;
A1?[a,q0¢ a$]
生成双副本串 [a,q0¢ a$];
2009-7-26 854
10.2 LBA及其与 CSG的等价性
( 2) 对于?a∈∑ -{¢,$},
A2?[a,a]A2
A2首先生成任意的形如 [a1,q0¢ a1][a2,a2]… [an,
an$]的双副本串中的子串 [a2,a2]… [an-1,an-1];
( 3) 对于?a∈∑ -{¢,$},
A2?[a,a$]
A2 最后 生成任 意的形 如 [a1,q0 ¢ a1][a2,
a2]… [an,an$]的双副本中的子串 [an,an$];
2009-7-26 855
10.2 LBA及其与 CSG的等价性
(4) 对于?a∈∑ -{$},?q,p∈ Q,?X,Y,
Z∈ Γ,X≠ $,如果 δ (q,X)=(p,Y,R),则
– [a,q X][b,Z]?[a,Y] [b,p Z]
– G模拟 M的一次右移;
(5) 对于?a,b∈∑ -{¢ },?q,p∈ Q,?X,
Y,Z∈ Γ,如果 δ (q,X)=(p,Y,L),则
– [b,Z] [a,q X]? [b,p Z] [a,Y]
– G模拟 M的一次左移;
2009-7-26 856
10.2 LBA及其与 CSG的等价性
(6) 对于?a∈∑,?q∈ F,?X,Y∈ Γ -{B},
[a,XqY]?a
– 由于 q为终止状态,所以可以消除它
(7) 对于?a∈∑ -{¢,$},?X∈ Γ -{B},
– [a,X]b?ab
– a [b,X]?ab
2009-7-26 857
10.3 小结本章讨论 TM与 PSG的等价性,介绍了识别 CSL的装置 ——LBA。
(1) 对于任一 PSGG=(V,T,P,S),存在
TM M,使得 L(M)=L(G);
(2) 对于任一 TM M,存在 PSGG=(V,T,P,
S),使得 L(G) =L(M);
(3) LBA是一种非确定的 TM,它的输入串被用符号¢和 $括起来,而且读头只能在¢
和 $之间移动;
2009-7-26 858
10.2 LBA及其与 CSG的等价性
(4)如果 L是 CSL,ε?L,则存在 LBA M,
使得 L=L(M);
(5)对于任意 L,ε?L,存在 LBA M,使得
L=L(M),则 L是 CSL。
形式语言与自动机理论
Formal Languages and Automata
Theory
蒋宗礼
2009-7-26 2
课程目的和基本要求
课程性质
– 技术基础
基础知识要求
– 数学分析(或者高等数学),离散数学
主要特点
– 抽象和形式化
– 理论证明和构造性
– 基本模型的建立与性质
2009-7-26 3
课程目的和基本要求
本专业人员 4种基本的专业能力
– 计算思维能力
– 算法的设计与分析能力
– 程序设计和实现能力
– 计算机软硬件系统的认知、分析、设计与应用能力
计算思维能力
– 逻辑思维能力和抽象思维能力
– 构造模型对问题进行形式化描述
– 理解和处理形式模型
2009-7-26 4
课程目的和基本要求
知识
– 掌握正则语言、下文无关语言的文法、识别模型及其基本性质、图灵机的基本知识。
能力
– 培养学生的形式化描述和抽象思维能力。
– 使学生了解和初步掌握,问题、形式化描述、
自动化(计算机化),这一最典型的计算机问题求解思路。
2009-7-26 5
主要内容
语言的 文法 描述 。
RL
– RG,FA,RE,RL的性质 。
CFL
– CFG(CNF,GNF),PDA,CFL的性质 。
TM
– 基本 TM,构造技术,TM的修改 。
CSL
– CSG,LBA。
2009-7-26 6
教材及主要参考书目
1.蒋宗礼,姜守旭,形式语言与自动机理论,北京:
清华大学出版社,2003年
2,John E Hopcroft,Rajeev Motwani,Jeffrey D
Ullman,Introduction to Automata Theory,
Languages,and Computation (2nd Edition).
Addison-Wesley Publishing Company,2001
3,John E Hopcroft,Jeffrey D Ullman,Introduction
to Automata Theory,Languages,and
Computation,Addison-Wesley Publishing
Company,1979
2009-7-26 7
第 1章 绪论
1.1 集合的基础知识
1.1.1 集合及其表示
– 集合:一定范围内的,确定的,并且彼此可以区分的对象汇集在一起形成的整体叫做 集合 (set),
简称为集 (set)。
– 元素:集合的成员为该集合的 元素 (element)。
– 集合描述形式 。
– 基数 。
– 集合的分类 。
2009-7-26 8
1.1.2 集合之间的关系
子集
如果集合 A中的每个元素都是集合 B的元素,
则称集合 A是集合 B的 子集 (subset),集合 B是集合 A的 包集 (container)。 记作 A?B。 也可记作 B?A。 A?B读作集合 A包含在集合 B中;
B?A读作集合 B包含集合 A。
如果 A?B,且?x∈ B,但 x?A,则称 A是 B的真子集 (proper subset),记作 A?B
2009-7-26 9
1.1.2 集合之间的关系
集合相等
– 如果集合 A,B含有的元素完全相同,则称集合 A与集合 B相等 (equivalence),记作 A=B。
对任意集合 A,B,C:
⑴ A=B iff A?B且 B?A。
⑵ 如果 A?B,则 |A|≤|B|。
⑶ 如果 A?B,则 |A|≤|B|。
⑷ 如果 A是有穷集,且 A?B,则 |B|>|A|。
2009-7-26 10
1.1.2 集合之间的关系
⑸ 如果 A?B,则对?x∈ A,有 x∈ B。
⑹ 如果 A?B,则对? x∈ A,有 x∈ B并且
x∈ B,但 x?A。
⑺ 如果 A?B且 B?C,则 A?C。
⑻ 如果 A?B且 B?C,或者 A?B且 B?C,或者
A?B且 B?C,则 A?C。
⑼ 如果 A=B,则 |A|=|B|。
2009-7-26 11
1.1.3 集合的运算
并 (union)
A与 B的 并 (union)是一个集合,该集合中的元素要么是 A的元素,要么是 B的元素,记作 A∪ B。
A∪ B={a|a∈ A或者 a∈ B}
A1∪ A2∪ … ∪ An={a|?i,1? i? n,使得 a∈ Ai}
A1∪ A2∪ … ∪ An ∪ … ={a|?i,i∈ N,使得 a∈ Ai}
1i
iA
},|{ AaSAaA
SA
2009-7-26 12
交 (intersection)
集合 A和 B中都有的所有元素放在一起构成的集合为 A与 B的 交,记作 A∩ B。
A∩ B={a|a∈ A且 a∈ B}
,∩,为交运算符,A∩ B读作 A交 B。
如果 A∩ B=Φ,则称 A与 B不相交 。
⑴ A∩B=B∩A。
⑵ (A∩B)∩C=A∩(B∩C)。
⑶ A∩A=A。
2009-7-26 13
交 (intersection)
⑷ A∩B=A iff A?B。
⑸ Φ∩A=Φ。
⑹ |A∩B|≤min{|A|,|B|}。
⑺ A∩(B∪ C)=(A∩B)∪ (A∩C)。
⑻ A∪ (B∩C)=(A∪ B)∩(A∪ C)。
⑼ A∩(A∪ B)=A。
⑽ A∪ (A∩B)=A。
2009-7-26 14
差 (difference)
属于 A,但不属于 B的所有元素组成的集合叫做 A
与 B的 差,记作 A-B。
A-B={a|a∈ A且 a?B}
,-”为减 (差 )运算符,A-B读作 A减 B。
⑴ A-A=Φ。
⑵ A-Φ=A。
⑶ A-B ≠ B-A。
⑷ A-B=A iff A∩B=Φ。
⑸ A∩(B-C)=(A∩B)-(A∩C)。
⑹ |A-B|≤|A|。
2009-7-26 15
对称差 (symmetric difference)
属于 A但不属于 B,属于 B但不属于 A的所有元素组成的集合叫 A与 B的 对称差,记作 A⊕B 。
A⊕B={a|a∈A 且 a?B或者 a?A且 a∈B}
,⊕,为对称差运算符 。 A⊕B 读作 A对称减 B。
A⊕B=(A∪B) -(A∩B)=(A -B)∪(B -A)。
2009-7-26 16
笛卡儿积 (Cartesian product)
A与 B的 笛卡儿积 (Cartesian product)是一个集合,
该集合是由所有这样的有序对 (a,b)组成的:其中 a∈ A,b∈ B,记作 A×B。
A×B={(a,b)|a∈ A& b∈ B }。
,×”为笛卡儿乘运算符 。 A×B读作 A叉乘 B。
⑴ A×B≠ B×A。
⑵ (A×B)×C≠ A×(B×C)。
⑶ A×A≠ A。
⑷ A×Φ =Φ。
2009-7-26 17
笛卡儿积 (Cartesian product)
⑸ A×(B∪ C)=(A×B)∪ (A×C)。
⑹ (B∪ C)×A=(B×A)∪ (A×C)。
⑺ A×(B∩ C)=(A×B)∩ (A×C)。
⑻ (B∩ C)×A=(B×A)∩ (C×A)。
⑼ A×(B-C)=(A×B)-(A×C)。
⑽ (B-C)×A=(B×A)-(C×A)。
⑾ 当 A,B为有穷集时,|A×B|=|A|*|B|。
2009-7-26 18
幂集 (power set)
A幂集 (power set)是一个集合,该集合是由 A的所有子集组成的,记作 2A。
2A={B|B?A}。
2A读作 A的幂集。
2009-7-26 19
幂集 (power set)
⑴ Φ∈ 2A。
⑵ Φ?2A。
⑶ Φ?2A。
⑷ 2Φ={Φ}。
⑸ A∈ 2A。
⑹ 如果 A是有穷集,则 |2A|=2|A|。
⑺ 2A∩B=2A∩2B。
⑻ 如果 A?B,则 2A?2B。
2009-7-26 20
补集 (complementary set)
A是论域 U上的一个集合,A补集 是由 U中的、
不在 A中的所有元素组成的集合,记作
AUA
U
U
2009-7-26 21
补集 (complementary set)
AA?
BAUBAAB &
BABA
BABA
AB?
UAA
如果 A?B,则 。
。
。
。
。
。
2009-7-26 22
1.2 关系
二元关系
递归定义与归纳证明
关系的闭包
2009-7-26 23
1.2.1 二元关系 (binary relation)
二元关系
– 任意的 R?A×B,R是 A到 B的 二元关系。
– (a,b) ∈ R,也可表示为,aRb。
– A称为 定义域 (domain),B称为 值域 (range)。
– 当 A=B时,则称 R是 A上的二元关系。
二元关系的性质
– 自反 (reflexive)性、反自反 (irreflexive)性、对称
(symmetric)性、反对称 (asymmetric)性、传递
(transitive)性。
2009-7-26 24
1.2.1 二元关系 (binary relation)
三歧性
–自反性、对称性、传递性。
等价关系 (equivalence relation)
–具有三歧性的二元关系称为 等价关系。
2009-7-26 25
1.2.1 二元关系 (binary relation)
等价类 (equivalence class)
S的满足如下要求的划分,S1,S2,S3,…,Sn… 称为 S关于 R的等价划分,Si称为等价类。
⑴ S= S1∪ S2∪ S3∪ … ∪ Sn∪ … ;
⑵ 如果 i≠j,则 Si∩Sj=Φ;
⑶ 对任意的 i,Si中的任意两个元素 a,b,aRb恒成立;
⑷ 对任意的 i,j,i≠j,Si中的任意元素 a和 Sj中的任意元素 b,aRb恒不成立
2009-7-26 26
1.2.1 二元关系 (binary relation)
指数 (index)
– 把 R将 S分成的等价类的个数称为是 R在 S上的指数 。如果 R将 S分成有穷多个等价类,则称 R
具有有穷指数;如果 R将 S分成无穷多个等价类,
则称 R具有无穷指数。
– 给定集合 S上的一个等价关系 R,R就确定了 S
的一个等价分类,当给定另一个不同的等价关系时,它会确定 S的一个新的等价分类。
2009-7-26 27
1.2.1 二元关系 (binary relation)
关系的合成 (composition)
设 R1?A× B是 A到 B的关系,R2?B× C是 B到
C的关系,R1与 R2的 合成 R1R2是 A到 C的关系:
R1R2={(a,c)|?(a,b) ∈ R1且 (b,c) ∈ R2 。
2009-7-26 28
1.2.1 二元关系 (binary relation)
⑴ R1R2≠R2R1。
⑵ (R1R2)R3=R1(R2R3)。 (结合率 )
⑶ (R1∪ R2)R3=R1R3∪ R2R3。 (右分配率 )
⑷ R3(R1∪ R2)=R3R1∪ R3R2。 (左分配率 )
⑸ (R1∩R2)R3?R1R3∩R2R3。
⑹ R3(R1∩R2)?R3R1∩R3R2。
2009-7-26 29
1.2.1 二元关系 (binary relation)
1,关系这一个概念用来反映对象 ——集合元素之间的联系和性质
2,二元关系则是反映两个元素之间的关系,
包括某个元素的某种属性 。
3,对二元关系的性质,要强调全称量词是对什么样的范围而言的 。
2009-7-26 30
1.2.2 等价关系与等价类 (略)
1.2.3 关系的合成 (略)
2009-7-26 31
1.2.4 递归定义与归纳证明
递归定义 (recursive definition)
– 又称为 归纳定义 (inductive definition),它来定义一个集合。
– 集合的递归定义由三部分组成:
基础 (basis):用来定义该集合的最基本的元素。
归纳 (induction):指出用集合中的元素来构造集合的新元素的规则。
极小性限定:指出一个对象是所定义集合中的元素的充要条件是它可以通过有限次的使用基础和归纳条款中所给的规定构造出来。
2009-7-26 32
1.2.4 递归定义与归纳证明
归纳证明
– 与递归定义相对应。
– 归纳证明方法包括三大步:
基础 (basis):证明最基本元素具有相应性质。
归纳 (induction):证明如果某些元素具有相应性质,则根据这些元素用所规定的方法得到的新元素也具有相应的性质。
根据归纳法原理,所有的元素具有相应的性质。
2009-7-26 33
1.2.4 递归定义与归纳证明
定义 1-17
设 R是 S上的关系,我们递归地定义 Rn的幂:
⑴ R0={(a,a)|a∈ S}。
⑵ Ri=Ri-1R (i=1,2,3,4,5,…) 。
2009-7-26 34
1.2.4 递归定义与归纳证明例 1-17 著名的斐波那契 (Fibonacci)数的定义
⑴ 基础,0是第一个斐波那契数,1第二个斐波那契数;
⑵ 归纳:如果 n是第 i个斐波那契数,m是第 i+1
个斐波那契数,则 n+m是第 i+2个斐波那契数,
这里 i为大于等于 1的正整数 。
⑶ 只有满足 (1)和 (2)的数才是斐波那契数
0,1,1,2,3,5,8,13,21,34,
55,…
2009-7-26 35
1.2.4 递归定义与归纳证明例 1-18算术表达式
⑴ 基础:常数是算术表达式,变量是算术表达式;
⑵ 归纳:如果 E1,E2是表达式,则 +E1,-E1、
E1+E2,E1-E2,E1*E2,E1/E2,E1**E2、
Fun(E1)是算术表达式 。 其中 Fun为函数名 。
⑶ 只有满足 (1)和 (2)的才是算术表达式。
2009-7-26 36
1.2.4 递归定义与归纳证明例 1-19对有穷集合 A,证明 |2A|=2|A|。
证明:
设 A为一个有穷集合,施归纳于 |A|:
⑴ 基础:当 |A|=0时,|2A|=|{Φ}|=1。
⑵ 归纳:假设 |A|=n时结论成立,这里 n ≥0,
往证当 |A|=n+1时结论成立
2A=2B∪ {C∪ {a}|C∈ 2B}
2B∩{C∪ {a}|C∈ 2B}=Φ
2009-7-26 37
1.2.4 递归定义与归纳证明
|2A|=|2B∪ {C∪ {a}|C∈ 2B}|
=|2B|+|{C∪ {a}|C∈ 2B}|
=|2B|+|2B|
=2*|2B|
=2*2|B|
=2|B|+1
=2|A|
⑶ 由归纳法原理,结论对任意有穷集合成立 。
2009-7-26 38
1.2.4 递归定义与归纳证明例 1-20 表达式的前缀形式是指将运算符写在前面,后跟相应的运算对象。如,+E1的前缀形式为 +E1,E1+E2的前缀形式为 +E1E2,
E1*E2的前缀形式为 *E1E2,E1**E2的前缀形式为 ** E1,Fun(E1) 的前缀形式为 FunE1 。
证明例 1-18所定义的表达式可以用这里定义的前缀形式表示。
2009-7-26 39
1.2.4 递归定义与归纳证明
递归定义给出的概念有利于归纳证明。在计算机科学与技术学科中,有许多问题可以用递归定义描述或者用归纳方法进行证明,而且在许多时候,这样做会带来许多方便。
主要是掌握 递归定义与归纳证明 的叙述格式。
2009-7-26 40
1.2.5 关系的闭包
闭包 (closure)
– 设 P是关于关系的性质的集合,关系 R的 P闭包
(closure)是包含 R并且具有 P中所有性质的最小关系 。
正闭包 (positive closure)
(1)R?R+。
(2)如果 (a,b),(b,c)∈ R+ 则 (a,c)∈ R+。
(3)除 (1),(2)外,R+不再含有其他任何元素 。
2009-7-26 41
1.2.5 关系的闭包
传递闭包 (transitive closure)
– 具有传递性的闭包 。
– R+具有传递性 。
可以证明,对任意二元关系 R,
R+= R∪ R2∪ R3∪ R4∪ …
而且当 S为有穷集时:
R+= R∪ R2∪ R3∪ … ∪ R|S|
2009-7-26 42
1.2.5 关系的闭包
克林闭包 (Kleene closure) R*
(1) R0? R*,R? R*。
(2) 如果 (a,b),(b,c)∈R * 则 (a,c)∈R *。
(3) 除 (1),(2)外,R*不再含有其他任何元素。
自反传递闭包 (reflexive and transitive
closure)
R*具有自反性、传递性 。
2009-7-26 43
1.2.5 关系的闭包
可以证明,对任意二元关系 R,
R*= R0∪ R+
R* =R0∪ R∪ R2∪ R3∪ R4∪ …
而且当 S为有穷集时:
R*= R0∪ R∪ R2∪ R3∪ … ∪ R|S|
2009-7-26 44
1.2.5 关系的闭包
R1,R2是 S上的两个二元关系
(1) Φ+=Φ。
(2) (R1+)+= R1+。
(3) (R1*)*= R1*。
(4) R1+∪ R2+?(R1∪ R2)+。
(5) R1*∪ R2*?(R1∪ R2)*。
2009-7-26 45
1.3 图
数学家欧拉 (L.Euler)解决著名的哥尼斯堡七桥。
直观地讲,图是由一些点和一些连接两点的边组成。
含无方向的边的图为无向图,含带有方向的边的图为有向图。
2009-7-26 46
1.3.1 无向图
无向图 (undirected graph)
– 设 V是一个非空的有穷集合,E?V×V,G=(V,
E)称为 无向图 (undirected graph)。其中 V中的元素称为 顶点 (vertex或 node),V称为顶点集,
E中的元素称为 无向边 (undirected edge),E为无向边集。
图表示
– V中称为顶点 v的元素用标记为 v的小圈表示,E
中的元素 (v1,v2)用标记为 v1,v2的顶点之间的连线表示。
2009-7-26 47
1.3.1 无向图
路 (path)
– 如果对于 0≤i≤k-1,k≥1,均有 (vi,vi+1)∈ E,则称 v0,v1,…,vk是 G=(V,E)的一条长为 k的路。
回路或圈 (cycle)
– 当路 v0,v1,…,vk中 v0=vk时,v0,v1,…,vk
叫做一个 回路或圈 (cycle)。
2009-7-26 48
1.3.1 无向图
顶点的度数
– 对于 v∈ V,|{v|(v,w)∈ E}|称为无向图 G=(V,
E)的顶点 v的度数,记作 deg(v)。
– 对于任何一个图,图中所有顶点的度数之和为图中边的 2倍。
Vv
Ev ||*2)d e g (
2009-7-26 49
deg(v1)=3
deg(v2)=3
deg(v3)=4
deg(v4)=3
deg(v5)=3
deg(v1)+deg(v2)+deg(v3)+deg(v4)+deg(v5)=16
2009-7-26 50
1.3.1 无向图
连通图
– 如果对于?v,w∈ V,v≠w,v与 w之间至少有一条路存在,则称 G=(V,E)是 连通图 。
– 图 G是连通的充要条件是 G中存在一条包含图的所有顶点的路。
2009-7-26 51
1.3.2 有向图
有向图 (directed graph)
– G=(V,E)。
– V,顶点 (vertex或 node)集。
– (v1,v2)∈ E,顶点 v1到顶点 v2的 有向边
(directed edge),或 弧 (arc),v1称为 前导
(predecessor),v2称为 后继 (successor)。
有向路 (directed path)
– 如果对于 0? i? k-1,k? 1,均有 (vi,vi+1)∈ E,
则称 v0,v1,…,vk是 G的一条长为 k的 有向路。
2009-7-26 52
1.3.2 有向图
有向回路或有向圈 (directed cycle)
– 对于 0? i? k-1,k? 1,均有 (vi,vi+1)∈ E,且
v0=vk,则称 v0,v1,…,vk是 G的一条长为 k的有向路为 一个 有向回路。
– 有向回路又叫有向圈。
有向图的图表示
– 图 G的图表示是满足下列条件的,图,,其中 V
中称为顶点 v的元素用标记为 v的小圈表示,E
中的元素 (v1,v2)用从标记为 v1的顶点到标记为 v2的顶点的弧表示。
2009-7-26 53
1.3.2 有向图
顶点的度数
– 入度 (数 ),ideg(v)=|{v|(w,v)∈ E}|。
– 出度 (数 ),odeg(v)= |{v|(v,w)∈ E}|。
对于任何一个有向图,图中所有顶点的入度之和与图中所有顶点的出度之和正好是图中边的个数
VvVv
Evovi ||)d e g ()d e g (
2009-7-26 54
两个不同的有向图
2009-7-26 55
1.3.3 树
满足如下条件的有向图 G=(V,E)称为一棵
(有序、有向 )树 (tree):
– 根 (root) v,没有前导,且 v到树中其他顶点均有一条有向路。
– 每个非根顶点有且仅有一个前导。
– 每个顶点的后继按其拓扑关系从左到右排序。
2009-7-26 56
1.3.3 树
树的基本概念
(1) 顶点也可以成为结点。
(2) 结点的前导为该结点的 父亲 (父结点 father)。
(3) 结点的后继为它的 儿子 (son)。
(4) 如果树中有一条从结点 v1到结点 v2的路,则称
v1是 v2的 祖先 (ancestor),v2是 v1的 后代 (descendant)。
(5) 无儿子的顶点叫做 叶子 (leaf)。
(6) 非叶结点叫做 中间结点 (interior)。
2009-7-26 57
1.3.3 树
树的层
– 根处在树的第 1层 (level)。
– 如果结点 v处在第 i层 (i? 1),则 v的儿子处在第
i+1层 。
– 树的最大层号叫做该树的高度 (height)。
2009-7-26 58
1.3.3 树
二元树
– 如果对于?v∈ V,v最多只有 2个儿子,则称
G=(V,E)为 二元树 (binary tree)。
– 对一棵二元树,它的第 n层最多有 2n-1个结点。
一棵 n层二元树最多有个 2n-1叶子。
2009-7-26 59
1.4 语言
1.4.1 什么是语言
例如:,学大一生是个我,;,我是一个大学生,。
语言是一定的群体用来进行交流的工具。
必须有着一系列的生成规则、理解 (语义 )
规则 。
2009-7-26 60
1.4.1 什么是语言
2009-7-26 61
1.4.1 什么是语言
斯大林:从强调语言的作用出发,把语言定义为,为广大的人群所理解的字和组合这些字的方法,。
语言学家韦波斯特 (Webster),为相当大的团体的人所懂得并使用的字和组合这些字的方法的统一体。
要想对语言的性质进行研究,用这些定义来建立语言的数学模型是不够精确的。必须有更形式化的定义。
2009-7-26 62
1.4.2 形式语言与自动机理论的产生与作用
语言学家乔姆斯基,毕业于宾西法尼亚大学,最初从产生语言的角度研究语言。
1956年,他将语言 L定义为一个字母表 ∑ 中的字母组成的一些串的集合,L?∑ *。
字母表上按照一定的规则定义一个文法
(grammar),该文法所能产生的所有句子组成的集合就是该文法产生的语言。
1959年,乔姆斯基根据产生语言文法的特性,将语言划分成 3大类。
2009-7-26 63
1.4.2 形式语言与自动机理论的产生与作用
1951年到 1956年,克林 (Kleene) 在研究神经细胞中,建立了识别语言的系统 ——有穷状态自动机。
1959年,乔姆斯基发现文法和自动机分别从生成和识别的角度去表达语言,而且证明了文法与自动机的等价性,这一成果被认为是将形式语言置于了数学的光芒之下,
使得形式语言真正诞生了。
2009-7-26 64
1.4.2 形式语言与自动机理论的产生与作用
20世纪 50年代,巴科斯范式 (Backus Nour
Form 或 Backus Normal Form,BNF)实现了对高级语言 ALGOL-60的成功描述。这一成功,使得形式语言在 20世纪 60年代得到了大力的发展。尤其是上下文无关文法被作为计算机程序设计语言的文法的最佳近似描述得到了较为深入的研究。
相应的理论用于其他方面。
2009-7-26 65
1.4.2 形式语言与自动机理论的产生与作用
形式语言与自动机理论在计算机科学与技术学科的人才的计算思维的培养中占有极其重要的地位。
计算学科的主题:,什么能被有效地自动化,。
2009-7-26 66
1.4.2 形式语言与自动机理论的产生与作用
计算机科学与技术学科人才专业能力构成
–,计算思维能力,——抽象思维能力、逻辑思维能力。
– 算法设计与分析能力 。
– 程序设计与实现能力 。
– 计算机系统的认知、分析、设计和应用能力。
2009-7-26 67
1.4.2 形式语言与自动机理论的产生与作用
2009-7-26 68
1.4.2 形式语言与自动机理论的产生与作用
考虑的对象的不同,所需要的思维方式和能力就不同,通过这一系统的教育,在不断升华的过程中,
逐渐地培养出了学生的抽象思维能力和对逻辑思维方法的掌握。
创新意识的建立和创新能力的培养也在这个教育过程中循序渐进地进行着。
内容用于后续课程和今后的研究工作。
是进行思维训练的最佳知识载体。
是一个优秀的计算机科学工作者必修的一门课程。
2009-7-26 69
1.4.3 基本概念
对语言研究的三个方面
– 表示 (representation)—— 无穷语言的表示。
– 有穷描述 (finite description) ——研究的语言要么是有穷的,要么是可数无穷的,这里主要研究可数无穷语言的有穷描述。
– 结构 (structure)——语言的结构特征。
2009-7-26 70
1.4.3 基本概念
字母表 (alphabet)
– 字母表 是一个非空有穷集合,字母表中的元素称为该字母表的一个 字母 (letter)。又叫做 符号
(symbol)、或者 字符 (character)。
– 非空性。
– 有穷性。
例如:
{a,b,c,d}
{ a,b,c,…,z}
{0,1}
2009-7-26 71
1.4.3 基本概念
字符的两个特性
– 整体性 (monolith),也叫不可分性。
– 可辨认性 (distinguishable),也叫可区分性。
例(续)
{a,a′,b,b′}
{aa,ab,bb}
{∞,∧,∨,≥,≤}
2009-7-26 72
1.4.3 基本概念
字母表的乘积 (product)
∑1∑2={ab|a∈ ∑1,b∈ ∑2}
例如:
{0,1}{0,1}={00,01,10,00}
{0,1}{a,b,c,d}={0a,0b,0c,0d,1a,1b,
1c,1d}
{a,b,c,d}{0,1}={a0,a1,b0,b1,c0,c1,
d0,d1}
{aa,ab,bb}{0,1}={ aa0,aa1,ab0,ab1,bb0,
bb1}
2009-7-26 73
1.4.3 基本概念
字母表 ∑的 n次 幂
∑0={ε}
∑n=∑n-1∑
ε是由 ∑中的 0个字符组成的。
∑的 正闭包
∑+=∑∪ ∑2∪ ∑3∪ ∑4∪ …
∑的 克林闭包
∑*=∑0∪ ∑+=∑0∪ ∑∪ ∑2∪ ∑3∪ …
2009-7-26 74
1.4.3 基本概念
例如:
{0,1}+={0,1,00,01,11,000,001,010,011,
100,…}
{0,1}*={ε,0,1,00,01,11,000,001,010,
011,100,…}
{a,b,c,d}+={a,b,c,d,aa,ab,ac,ad,ba,
bb,bc,bd,…,aaa,aab,aac,aad,aba,abb,
abc,…}
{a,b,c,d}*={ε,a,b,c,d,aa,ab,ac,ad,
ba,bb,bc,bd,…,aaa,aab,aac,aad,aba,
abb,abc,…}
2009-7-26 75
1.4.3 基本概念
结论:
∑*={x|x是 ∑中的若干个,包括 0个字符,连接而成的一个字符串 }。
∑+={x|x是 ∑中的至少一个字符连接而成的字符串 }。
2009-7-26 76
1.4.3 基本概念
句子 (sentence)
∑是一个字母表,?x∈ ∑*,x叫做 ∑上的一个 句子。
句子相等。
两个句子被称为相等的,如果它们对应位置上的字符都对应相等。
别称字 (word),(字符、符号 )行 (line),(字符、符号 )串
(string)。
2009-7-26 77
1.4.3 基本概念
出现 (apperance)
– x,y∈ ∑*,a∈ ∑,句子 xay中的 a叫做 a在该句子中的一个 出现。
– 当 x=ε时,a的这个出现为字符串 xay的首字符
– 如果 a的这个出现是字符串 xay的第 n个字符,
则 y的首字符的这个出现是字符串 xay的第 n+1
个字符。
– 当 y=ε时,a的这个出现是字符串 xay的尾字符
– 例,abaabb。
2009-7-26 78
1.4.3 基本概念
句子的长度 (length)
–?x∈ ∑*,句子 x中字符出现的总个数叫做该 句子的长度,记作 |x|。
– 长度为 0的字符串叫 空句子,记作 ε。
例如:
|abaabb|=6
|bbaa|=4
|ε|=0
|bbabaabbbaa|=11
2009-7-26 79
1.4.3 基本概念
注意事项
– ε是一个句子。
– {ε}≠Φ。这是因为 {ε}不是一个空集,它是含有一个空句子 ε的集合。 |{ε}|=1,而 |Φ|=0。
2009-7-26 80
1.4.3 基本概念
并置 (concatenation)
– x,y∈ ∑*,x,y的 并置 是由串 x直接相接串 y所组成的。记作 xy。并置又叫做 连结。
串 x的 n次 幂
x0=ε
xn=xn-1x
2009-7-26 81
1.4.3 基本概念
例 如:
– 对 x=001,y=1101
x0=y0=ε
x4=001001001001
y4=1101110111011101
– 对 x=0101,y=110110
x2=01010101
y2=110110110110
x4=0101010101010101
y4=110110110110110110110110
2009-7-26 82
1.4.3 基本概念
∑*上的并置运算性质
⑴ 结合律,(xy)z=x(yz)。
⑵ 左消去律:如果 xy=xz,则 y=z。
⑶ 右消去律:如果 yx=zx,则 y=z。
⑷ 惟一分解性:存在惟一确定的 a1,a2,…,
an∈ ∑,使得 x= a1a2… an。
⑸ 单位元素,εx=xε=x。
2009-7-26 83
1.4.3 基本概念
前缀与后缀设 x,y,z,w,v∈ ∑*,且 x=yz,w=yv
(1) y是 x的前缀 (prefix)。
(2)如果 z≠ε,则 y是 x的真前缀 (proper prefix)。
(3) z是 x的后缀 (suffix);
(4) 如果 y≠ε,则 z是 x的真后缀 (proper suffix)。
(5) y是 x和 w的公共前缀 (common Prefix)。
2009-7-26 84
1.4.3 基本概念
公共 前缀与后缀
(6)如果 x和 w的任何公共前缀都是 y的前缀,则 y是 x和 w
的最大公共前缀。
(7) 如果 x=zy,w=vy,则 y是 x和 w的公共后缀 (common
suffix )。
(8)如果 x和 w的任何公共后缀都是 y的后缀,则 y是 x和 w
的最大公共后缀。
2009-7-26 85
1.4.3 基本概念
例字母表 ∑={a,b}上的句子 abaabb的前缀,后缀,真前缀和真后缀如下:
前缀,ε,a,ab,aba,abaa,abaab,abaabb
真前缀,ε,a,ab,aba,abaa,abaab
后缀,ε,b,bb,abb,aabb,baabb,abaabb
真后缀,ε,b,bb,abb,aabb,baabb
2009-7-26 86
1.4.3 基本概念
结论
⑴ x的任意前缀 y有惟一的一个后缀 z与之对应,使得
x=yz;反之亦然 。
⑵ x的任意真前缀 y有惟一的一个真后缀 z与之对应,使得 x=yz;反之亦然 。
⑶ |{w|w是 x的后缀 }|=|{w|w是 x的前缀 }|。
⑷ |{w|w是 x的真后缀 }|=|{w|w是 x的真前缀 }|。
⑸ {w|w是 x的前缀 }={w|w是 x的真前缀 }∪ {x},
|{w|w是 x的前缀 }|=|{w|w是 x的真前缀 }|+1。
2009-7-26 87
1.4.3 基本概念
结论
⑹ {w|w是 x的后缀 }={w|w是 x的真后缀 }∪ {x},
|{w|w是 x的后缀 }|=|{w|w是 x的真后缀 }|+1。
⑺ 对于任意字符串 w,w是自身的前缀,但不是自身的真前缀; w是自身的后缀,但不是自身的真后缀 。
⑻ 对于任意字符串 w,ε是 w的前缀,且是 w的真前缀; ε是 w的后缀,且是 w的真后缀
2009-7-26 88
1.4.3 基本概念
约定
⑴ 用小写字母表中较为靠前的字母 a,b,
c,… 表示字母表中的字母 。
⑵ 用小写字母表中较为靠后的字母 x,y,
z,… 表示字母表上的句子 。
⑶ 用 xT表示 x的倒序。例如,如果 x=abc,则
xT=cba。
2009-7-26 89
1.4.3 基本概念
子串 (substring)
– w,x,y,z∈ ∑*,且 w=xyz,则称 y是 w的 子串。
公共子串 (common substring)
– t,u,v,w,x,y,z∈ ∑*,且 t=uyv,w=xyz,
则称 y是 t和 w的 公共子串 (common substring)。
如果 y1,y2,……,yn是 t和 w的公共子串,且
max{|y1|,|y2|,…,|yn|}=|yj|,则称 yj是 t和 w的最大公共子串。
– 两个串的最大公共子串并不一定是惟一的。
2009-7-26 90
1.4.3 基本概念
语言 (language)
L?∑*,L称为字母表 ∑上的一个 语言
(language),?x∈ L,x叫做 L的一个句子。
例,{0,1}上的不同语言
{00,11},{0,1}
{0,1,00,11},{0,1,00,11,01,10}
{00,11}*,{01,10}*,{00,01,10,11}*,
{0}{0,1}*{1},{0,1}*{111}{0,1}*
2009-7-26 91
1.4.3 基本概念
语言的 乘积 (product)
L1?∑1*,L2?∑2*,语言 L1与 L2的 乘积 是一个语言,该语言定义为:
L1L2={xy| x∈ L1,y∈ L2}
是字母表 ∑1∪ ∑2上的语言。
2009-7-26 92
1.4.3 基本概念
例
⑴ L1={0,1}。
⑵ L2={00,01,10,11}。
⑶ L3={0,1,00,01,10,11,000,… }=∑+。
⑷ L4={ε,0,1,00,01,10,11,000,… }=∑*。
⑸ L5={0n|n≥1}。
⑹ L6={0n1n|n≥1}。
⑺ L7={1n|n≥1}。
⑻ L8={0n1m|n,m≥1}。
⑼ L9={0n1n0n|n≥1}。
⑽ L10={0n1m0k|n,m,k≥1}。
⑾ L11={x|x∈ ∑+且 x中 0和 1的个数相同 }。
2009-7-26 93
1.4.3 基本概念
上述几个语言的部分特点及相互关系上述所有语言都是 L4的子集 (子语言 );
L1,L2是有穷语言;其他为无穷语言;其中 L1是 ∑
上的所有长度为 1的句子组成的语言,L2是 ∑ 上的所有长度为 2的句子组成的语言;
L3,L4分别是 ∑ 的正闭包和克林闭包;
L5L7≠ L6,但 L5L7= L8;同样 L9≠ L10,但是我们有,L6?L5L7,L9?L10。
2009-7-26 94
1.4.3 基本概念
L6={0n1n|n? 1}中的句子中的 0和 1的个数是相同的,并且所有的 0在所有的 1的前面,
L11={x|x∈∑ +且 x中 0和 1的个数相同 }中的句子中虽然保持着 0的个数和 1的个数相等,
但它并没要求所有的 0在所有的 1的前面 。
例如,0101,1100∈ L11,但是 0101? L6,
1100?L6。 而对?x∈ L6,有 x∈ L11。 所以,
L6?L11。
2009-7-26 95
1.4.3 基本概念
L1?L12,L2?L12
L5?L12,L6?L12
L7?L12,L8?L12
L9?L12,L10?L12
L1?L10,L2?L10
L5?L10,L6?L10
L7?L10,L8?L10
L9?L10,L10?L12
2009-7-26 96
1.4.3 基本概念
例
⑴ {x|x=xT,x∈∑ }。
⑵ {xxT|x∈∑ +}。
⑶ {xxT|x∈∑ *}。
⑷ {xwxT|x,w∈∑ +}。
⑸ {xxTw|x,w∈∑ +}。
2009-7-26 97
1.4.3 基本概念
幂
L∈∑ *,L的 n次 幂 是一个语言,该语言定义为
⑴ 当 n=0是,Ln={ε }。
⑵ 当 n? 1时,Ln= Ln-1L 。
正闭包
L+=L∪ L2∪ L3∪ L4∪ …
克林闭包
L*= L0∪ L∪ L2∪ L3∪ L4∪ …
2009-7-26 98
1.5 小结本章简单叙述了一些基础知识,一方面,希望读者通过对本章的阅读,熟悉集合、关系、图、形式语言等相关的一些基本知识点,为以后各章学习作适当的准备。另一方面,也使读者熟悉本书中一些符号的意义。
2009-7-26 99
1.5 小结
(1) 集合:集合的表示,集合之间的关系,集合的基本运算 。
(2) 关系:主要介绍了二元关系相关的内容 。
包括等价关系,等价分类,关系合成,关系闭包 。
(3) 递归定义与归纳证明 。
2009-7-26 100
1.5 小结
(4) 图:无向图,有向图,树的基本概念 。
(5) 语言与形式语言:自然语言的描述,形式语言和自动机理论的出现,形式语言和自动机理论对计算机科学与技术学科人才能力培养的作用
(6) 基本概念:字母表,字母,句子,字母表上的语言,语言的基本运算
2009-7-26 101
第 2章 文法
对任何语言 L,有一个字母表 ∑,使得 L?∑ * 。
L的具体组成结构是什么样的?
一个给定的字符串是否为一个给定语言的句子?如果不是,它在结构的什么地方出了错?进一步地,
这个错误是什么样的错?如何更正? …… 。
这些问题对有穷语言来说,比较容易解决。
这些问题对无穷语言来说,不太容易解决。
语言的有穷描述。
2009-7-26 102
第 2章 文法
主要内容文法的直观意义与形式定义,推导,文法产生的语言,句子,句型; 乔姆斯基 体系,左线性文法,右线性文法,文法的推导与归约;空语句 。
重点文法,推导,归约,模型的等价性证明 。
难点形式化的概念,文法的构造 。
2009-7-26 103
2.1 启示
文法的概念最早是由语言学家们在研究自然语言理解中完成形式化。
归纳如下句子的描述:
⑴ 哈尔滨是美丽的城市 。
⑵ 北京是祖国的首都 。
⑶ 集合是数学的基础 。
⑷ 形式语言是很抽象的 。
⑸ 教育走在社会发展的前面 。
⑹ 中国进入 WTO。
2009-7-26 104
2.1 启示
6个句子的主体结构
<名词短语 ><动词短语 ><句号 >
<名词短语 >={哈尔滨,北京,集合,形式语言,
教育,中国 }
<动词短语 >={是美丽的城市,是祖国的首都,是数学的基础,是很抽象的,走在社会发展的前面,进入 WTO}
<句号 >={。 }
2009-7-26 105
2.1 启示
<动词短语 >可以是 <动词 ><形容词短语 > 或者 <动词 ><名词短语 > 。
<名词短语 >={北京,哈尔滨,形式语言,中国,
教育,集合,WTO,美丽的城市,祖国的首都,
数学的基础,社会发展的前面 }。
<动词 >={是,走在,进入 }。
<形容词短语 >={很抽象的 }。
把 <名词短语 ><动词短语 ><句号 >取名为 <句子 >。
2009-7-26 106
2.1 启示
2009-7-26 107
2.1 启示
表示成 α?β 形式
<句子 >?<名词短语 ><动词短语 ><句号 >
<动词短语 >?<动词 ><形容词短语 >
<动词短语 >?<动词 ><名词短语 >
<动词 >?是
2009-7-26 108
2.1 启示
<动词 >?走在
<动词 >?进入
<形容词短语 >?很抽象的
<名词短语 >?北京
<名词短语 >?哈尔滨
<名词短语 >?形式语言
2009-7-26 109
2.1 启示
<名词短语 >?中国
<名词短语 >?教育
<名词短语 >?集合
<名词短语 >?WTO
<名词短语 >?美丽的城市
<名词短语 >?祖国的首都
<名词短语 >?数学的基础
<名词短语 >?社会发展的前面
<句号 >?。
2009-7-26 110
2.1 启示
表示一个语言,需要 4种东西
⑴形如 <名词短语 >的,符号,
它们表示相应语言结构中某个位置上可以出现的一些内容。每个,符号,对应的是一个集合,在该语言的一个具体句子中,句子的这个位置上能且仅能出现相应集合中的某个元素。所以,这种,符号,代表的是一个语法范畴。
⑵ <句子 >
所有的,规则,,都是为了说明 <句子 >的结构而存在,相当于说,定义的就是 <句子 >。
2009-7-26 111
2.1 启示
⑶ 形如北京的,符号,
它们是所定义语言的合法句子中将出现的,符号,。仅仅表示自身,称为终极符号 。
⑷所有的,规则,都呈 α?β 的形式在产生语言的句子中被使用,称这些,规则,
为产生式。
2009-7-26 112
2.2 形式定义
文法 (grammar)
G=(V,T,P,S)
– V——为 变量 (variable)的非空有穷集。
A∈ V,A叫做一个 语法变量 (syntactic
Variable),简称为变量,也可叫做 非终极符号 (nonterminal)。它表示一个 语法范畴 (syntactic Category)。所以,本文中有时候又称之为语法范畴 。
2009-7-26 113
2.2 形式定义
– T——为 终极符 (terminal)的非空有穷集。
a∈ T,a叫做终极符。由于 V中变量表示语法范畴,T中的字符是语言的句子中出现的字符,所以,有 V∩ T=Φ。
– S——S∈ V,为文法 G的 开始符号 (start
symbol)。
2009-7-26 114
2.2 形式定义
– P——为 产生式 (production)的非空有穷集合。 P中的元素均具有形式 α?β,
被称为产生式,读作,α 定义为 β 。其中 α ∈ (V∪ T)+,且 α 中至少有 V中元素的一个出现。 β ∈ (V∪ T)*。 α 称为产生式 α?β 的 左部,β 称为产生式 α?β
的 右部 。产生式又叫做定义式或者语法规则。
2009-7-26 115
2.2 形式定义
例 2-1 以下四元组都是文法。
⑴ ({A},{0,1},{A?01,A?0A1,A?1A0},A)。
⑵ ({A},{0,1},{A?0,A?0A},A)。
⑶ ({A,B},{0,1},{A?01,A?0A1,A?1A0,B?AB,
B?0},A)。
⑷ ({A,B},{0,1},{A?0,A?1,A?0A,A?1A },
A)。
2009-7-26 116
2.2 形式定义
⑸ ({S,A,B,C,D},{a,b,c,d,#},{S?ABCD,
S?abc#,A?aaA,AB?aabbB,BC?bbccC,
cC?cccC,CD?ccd#,CD?d#,CD?#d},S)。
⑹ ({S},{a,b},{S?00S,S?11S,S?00,S?11},
S)。
2009-7-26 117
2.2 形式定义
约定
⑴ 对一组有相同左部的产生式
α?β 1,α?β 2,…,α?β n
可以简单地记为:
α?β 1|β 2|… |β n
读作,α 定义为 β 1,或者 β 2,…,或者 β n。并且称它们为 α 产生式。 β 1,β 2,…,β n称为候选式 (candidate)。
2009-7-26 118
2.2 形式定义
⑵ 使用符号
英文字母表较为前面的大写字母,如 A,B,C,…
表示语法变量;
英文字母表较为前面的小写字母,如 a,b,c,…
表示终极符号;
英文字母表较为后面的大写字母,如 X,Y,Z,…
表示该符号是语法变量或者终极符号;
英文字母表较为后面的小写字母,如 x,y,z,…
表示由终极符号组成的行;
希腊字母 α,β,γ … 表示由语法变量和终极符号组成的行
2009-7-26 119
2.2 形式定义
例 2-3 四元组是否满足文法的要求。
– ({A,B,C,E},{a,b,c},{S?ABC|abc,D?e|a,
FB?c,A?A,E? abc|ε },S)
– 4种修改
(1) ({A,B,C,E,S,D,F},{a,b,c,e},
{S?ABC|abc,D?e|a,FB?c,A?A,E? abc|ε },
S)。
(2) ({A,B,C,E,S },{a,b,c},{S?ABC|abc,
A?A,E? abc|ε },S)。
(3) ({A,B,C,E},{a,b,c},{ A?A,E?
abc|ε },A)。
(4) ({A,B,C,E},{a,b,c},{ A?A,E?
abc|ε },E)。
2009-7-26 120
2.2 形式定义
推导 (derivation)
设 G=(V,T,P,S)是一个文法,如果 α?β ∈ P,
γ,δ ∈ (V∪ T)*,则称 γ α δ 在 G中直接推导出 γ β δ 。
γ α δ?G γ β δ
读作,γ α δ 在文法 G中直接推导出 γ β δ 。
,直接推导,可以简称为 推导 (derivation),也称推导为 派生。
2009-7-26 121
2.2 形式定义
归约 (reduction)
– γ α δ?G γ β δ
– 称 γ β δ 在文法 G中直接归约成 γ α δ 。在不特别强调归约的直接性时,,直接归约,可以简称为 归约。
2009-7-26 122
2.2 形式定义
1,推导与归约表达的意思的异同 。
2,推导与归约和产生式不一样 。 所以,?G
和?所表达的意思不一样 。
3,推导与归约是一一对应的 。
4,推导与归约的作用 。
2009-7-26 123
2.2 形式定义
G,?G+,?G*当成 (V∪ T)*上的二元关系。
(1)α?Gn β,表示 α 在 G中经过 n步推导出 β ;
β 在 G中经过 n步归约成 α 。即,存在 α 1,
α 2,…,α n-1∈ (V∪ T)*使得 α?G α 1,
α 1?G α 2,…,α n-1?G β 。
(2)当 n=0时,有 α =β 。即 α?G0 α 。
(3)α?G+ β,表示 α 在 G中经过至少 1步推导出 β ; β 在 G中经过至少 1步归约成 α 。
2009-7-26 124
2.2 形式定义
(4)α?G* β,表示 α 在 G中经过若干步推导出 β ; β 在 G中经过若干步归约成 α 。
分别用?,?+,?*,?n代替
G,?G+,?G*,?Gn 。
2009-7-26 125
2.2 形式定义
例 2-4 设 G=({A},{a},{A?a|aA},A)
A? aA 使用产生式 A?aA
aaA 使用产生式 A?aA
aaaA 使用产生式 A?aA
aaaaA 使用产生式 A?aA
…
a… aA 使用产生式 A?aA
a… aa 使用产生式 A?a?
2009-7-26 126
2.2 形式定义
A? aA 使用产生式 A?aA
aaA 使用产生式 A?aA
aaaA 使用产生式 A?aA
aaaaA 使用产生式 A?aA
…
a… aA 使用产生式 A?aA
a… aaA 使用产生式 A?aA
2009-7-26 127
2.2 形式定义
AAaaAAA? AAaaAaAA 使用产生式 A?aA
AaAaaAaAA 使用产生式 A?aA
AaAaaAaaA 使用产生式 A?a
aaAaaAaaA 使用产生式 A?a
aaAaaAaaa 使用产生式 A?a
aaaAaaAaaa 使用产生式 A?aA
aaaaaaAaaa 使用产生式 A?a
aaaaaaaaaa 使用产生式 A?a
2009-7-26 128
2.2 形式定义
例 2-5 设 G=({S,A,B},{0,1},
{S?A|AB,A?0|0A,B?1|11},S)
对于 n? 1,
A?n 0n 首先连续 n-1次使用产生式;
A?0A,最后使用产生式 A?0;
A?n 0nA 连续 n次使用产生式 A?0A;
B? 1 使用产生式 B?1;
B? 11 使用产生式 B?11。
2009-7-26 129
2.2 形式定义语 法 范 畴 A 代表的集合 L(A)={0,00,000,
0000,…… }={0n|n? 1};
语法范畴 B代表的集合 L(B)={1,11}
语法范畴 S代表的集合 L(S)=L(A)∪ L(A)L(B)
={0,00,000,0000,… }∪ {0,00,000,
0000,… }{1,11}
={0,00,000,0000,… }∪
∪ {01,001,0001,00001,… }∪
∪ {011,0011,00011,000011,… }
2009-7-26 130
2.2 形式定义例 2-6 设 G=({A},{0,1},{A?01,A?0A1},A),
A?n 0nA1n n? 0
0nA1n? 0n+1A1n+1 n? 0
0nA1n? 0n+11n+1 n? 0
0nA1n?i 0n+iA1n+i n? 0,i? 0
0nA1n?i 0n+i1n+I n? 0,i? 0
0nA1n?* 0mA1m n? 0,m? n
0nA1n?+ 0m1m n? 0,m? n+1
0nA1n?+ 0mA1m n? 0,m? n+1
0nA1n?+ 0m1m n? 0,m? n+1
2009-7-26 131
2.2 形式定义
几点结论
– 对任意的 x∈∑ +,我们要使语法范畴 D代表的集合为 {xn|n? 0},可用产生式组 {D?ε |xD}来实现。
– 对任意的 x,y∈∑ +,我们要使语法范畴 D代表的集合为 {xnyn|n? 1},可用产生式组
{D?xy|xDy}来实现。
– 对任意的 x,y∈∑ +,我们要使语法范畴 D代表的集合为 {xnyn|n? 0},可用产生式组
{D?ε |xDy}来实现。
2009-7-26 132
2.2 形式定义
语言 (language)
L(G)={w | w∈ T*且 S?* w}
句子 (sentence)
w∈ L(G),w称为 G产生的一个 句子。
句型 (sentential form)
G=(V,T,P,S),对于?α ∈ (V∪ T)*,如果 S
* α,则称 α 是 G产生的一个 句型。
2009-7-26 133
2.2 形式定义
句子 w是从 S开始,在 G中可以推导出来的终极符号行,它 不含 语法变量。
句型 α 是从 S开始,在 G中可以推导出来的符号行,它 可能含有 语法变量。
例 2-7 给定文法 G=({S,A,B,C,D},{a,
b,c,d,#},{S?ABCD|abc#,A?aaA,
AB?aabbB,BC?bbccC,cC?cccC,
CD?ccd#,CD?d#,CD?#d},S)
2009-7-26 134
2.2 形式定义
S? ABCD 使用产生式 S?ABCD
aaABCD 使用产生式 A?aaA
aaaaABCD 使用产生式 A?aaA
aaaaaabbBCD 使用产生式 AB?aabbB
aaaaaabbbbccCD 使用产生式 BC?bbccC
aaaaaabbbbccccCD 使用产生式 cC?cccC
aaaaaabbbbcccc#d 使用产生式 CD?#d
2009-7-26 135
2.2 形式定义
S? ABCD 使用产生式 S?ABCD
AbbccCD 使用产生式 BC?bbccC
aaAbbccCD 使用产生式 A?aaA
aaAbbccccd# 使用产生式 CD?ccd#
aaaaAbbccccd# 使用产生式 A?aaA
aaaaaaAbbccccd# 使用产生式 A?aaA
aaaaaaaaAbbccccd# 使用产生式 A?aaA
2009-7-26 136
2.2 形式定义
例 2-8 构造产生标识符的文法
G=({<标识符 >,<大写字母 >,<小写字母 >,<阿拉伯数字 >},{0,
1,…,9,A,B,C,…,Z,a,b,c,…,z},P,<标识符 >)
P={ <标识符 >?<大写字母 >|<小写字母 >,
<标识符 >?<标识符 ><大写字母 >|<标识符 ><小写字母 >|<标识符 ><
阿拉伯数字 >,
<大写字母 >?A|B|C|D|E|F|G|H|I|J|K|L|M|N|O,
<大写字母 >?P|Q|R|S|T|U|V|W|X|Y|Z,
<小写字母 >?a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z,
<阿拉伯数字 >?0|1|2|3|4|5|6|7|8|9 }
2009-7-26 137
2.2 形式定义
G′ =({<标识符 >,<头 >,<尾 >},{0,1,
2,…,9,A,B,C,…,Z,a,b,
c,…,z},P′,<标识符 >)
P′ ={<标识符 >?<头 ><尾 >,
<头 >?A|B|C|D|E|F|G|H|I|J|K|L|M|N
<头 >?O|P|Q|R|S|T|U|V|W|X|Y|Z,
<头 >?a|b|c|d|e|f|g|h|i|j|k|l|m|n
<头 >?o|p|q|r|s|t|u|v|w|x|y|z,
2009-7-26 138
2.2 形式定义
<尾 >?ε |0<尾 >|1<尾 >|2<尾 >|3<尾 >|4<尾 >|5<尾 >,
<尾 >? 6<尾 >|7<尾 >|8<尾 >|9<尾 >,
<尾 >?A<尾 >|B<尾 >|C<尾 >|D<尾 >|E<尾 >|F<尾 >,
<尾 >?G<尾 >|H<尾 >|I<尾 >|J<尾 >|K<尾 >,
<尾 >?L<尾 >|M<尾 >|N<尾 >|O<尾 >|P<尾 >|Q<尾 >,
<尾 >? R<尾 >|S<尾 >|T<尾 >|U<尾 >|V<尾 >,
<尾 >? W<尾 >|X<尾 >|Y<尾 >|Z<尾 >|a<尾 >|b<尾 >,
<尾 >?c<尾 >|d<尾 >|e<尾 >|f<尾 >|g<尾 >,
<尾 >?h<尾 >|i<尾 >|j<尾 >|k<尾 >|l<尾 >|m<尾 >,
<尾 >? n<尾 >|o<尾 >|p<尾 >|q<尾 >|r<尾 >,
<尾 >?s<尾 >|t<尾 >|u<尾 >|v<尾 >|w<尾 >|x<尾 >
<尾 >?y<尾 >|z<尾 > }
2009-7-26 139
2.2 形式定义
<标识符 >?<标识符 ><阿拉伯数字 >
<标识符 >3
<标识符 ><阿拉伯数字 >3
<标识符 >23
<标识符 ><小写字母 >23
<标识符 >n23
<标识符 ><阿拉伯数字 >n23
<标识符 >8n23
<标识符 ><小写字母 >8n23
<标识符 >d8n23
<小写字母 >d8n23
id8n23
2009-7-26 140
2.2 形式定义标识符 >?<头 ><尾 >
i<尾 >
id<尾 >
id8<尾 >
id8n<尾 >
id8n2<尾 >
id823<尾 >
id8n23
2009-7-26 141
2.2 形式定义
使用符号使文法更简洁
G′′=({<标识符 >},{b,a,d},{<标识符 >?b|a|<
标识符 >b|<标识符 >a|<标识符 >d},<标识符 >)
G′′′=({L},{b,a,d},{L?b|a|Lb|La|Ld},L)
G′′′′=({L,H,T},{ b,a,d },{L?HT,
H?b|a,T?ε |bT|aT|dT},L)
2009-7-26 142
2.3 文法的构造
例 2-9 构造文法 G,使 L(G)={0,1,00,11}
– 将文法的开始符号定义为这 4个句子。
G1=({S},{0,1},{S?0,S?1,S?00,S?11},S)
– 先用变量 A表示 0,用变量 B表示 1。
G2=({S,A,B},{0,1},{S?A,S?B,S?AA,
S?BB,A?0,B?1},S)
– 基于 G2,考虑,规范性,问题。
G3=({S,A,B},{0,1},{S?0,S?1,S?0A,
S?1B,A?0,B?1},S)
2009-7-26 143
2.3 文法的构造
– 可以在 V,T中增加一些元素,以获得,不同的,文法。
G4=({S,A,B,C},{0,1,2},{S?A,S?B,
S?AA,S?BB,A?0,B?1},S)
G5=({S,A,B,C},{0,1,2},{S?A,S?B,
S?AA,S?BB,A?0,B?1,CACS?21,
C?11,C?2},S)
L(G1)= L(G2)= L(G3)= L(G4)= L(G5)
2009-7-26 144
2.3 文法的构造
等价 (equivalence)
– 设有两个文法 G1和 G2,如果 L(G1)= L(G2),则称 G1与 G2等价。
约定
– 对一个文法,只列出该文法的所有产生式,且所列第一个产生式的左部是该文法的开始符号。
2009-7-26 145
2.3 文法的构造
G1,S?0|1|00|11
G2,S?A|B|AA|BB,A?0,B?1
G3,S?0|1|0A|1B,A?0,B?1
G4,S?A|B|AA|BB,A?0,B?1
G5,S?A|B|BB,A?0,B?1,CACS?21,
C?11,C?2
2009-7-26 146
2.3 文法的构造
例 2-10
L={0n|n? 1}
G6,S?0|0S
L={0n|n? 0}
G7,S?ε |0S
L={02n13n|n? 0}
G8,S?ε |00S111
2009-7-26 147
2.3 文法的构造
例 2-11 构造文法 G9,使 L(G9)={w|w∈ {a,b,…,
z}+}。
G9,S?A|AS
A?a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
用 S?A|AS生成 An。
不可以用 A?a|b|c|…|z 表示。
A?a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z
不可以用 A?a8表示 A?aaaaaaaa。
不能用 A?an 表示 A可以产生任意多个 a。
2009-7-26 148
2.3 文法的构造
例 2-12 构造文法 G10,使
L(G10)={wwT|w∈ {0,1,2,3}+}。
文法
S?HE
H?0|1|2|3|0H|1H|2H|3H
E?0|1|2|3|E0|E1|E2|E3
难以生成 L(G10)。
2009-7-26 149
2.3 文法的构造
{wwT|w∈ {0,1,2,3}+}的句子的特点设 w=a1a2… an,从而有 wT= an… a2 a1,故 w
wT= a1a2… anan… a2 a1
满足 f(w wT,i)=f(w wT,|w wT|-i+1)。
递归地定义 L
– ⑴ 对?a∈ {0,1,2,3},aa∈ L;
– ⑵ 如果 x∈ L,则对?a∈ {0,1,2,3},axa∈ L;
– ⑶ L中不含不满足 (1),(2)任何其他的串。
2009-7-26 150
2.3 文法的构造根据递归定义中的第一条,有如下产生式组:
S?00 | 11 | 22 | 33
再根据递归定义第二条,又可得到如下产生式组:
S?0S0 | 1S1 | 2S2 | 3S3
从而,
G10,S?00 | 11 | 22 | 33 | 0S0 | 1S1 | 2S2 | 3S3
2009-7-26 151
2.3 文法的构造
例 2-13 构造文法 G12,使 L(G12)={w|w是我们习惯的十进制有理数 }。
G12,S?R | +R | -R
R?N | B
B?N.D
N?0 | AM
D?0 | MA
A?1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
M?ε | 0M | 1M | 2M | 3M | 4M | 5M | 6M | 7M | 8M | 9M
2009-7-26 152
2.3 文法的构造
例 2-14 构造产生算术表达式的文法:
⑴ 基础:常数是算术表达式,变量是算术表达式;
⑵ 归纳:如果 E1,E2是表达式,则 +E1,-E1、
E1+E2,E1-E2,E1*E2,E1/E2,E1**E2,Fun(E1)
是算术表达式 。 其中 Fun为函数名 。
⑶ 只有满足 (1)和 (2)的才是算术表达式。
G13,E?id|c|+E|-E|E+E|E-E|E*E|E/E|E**E|Fun(E)
2009-7-26 153
2.3 文法的构造
例 2-15 构造产生语言 {anbncn|n? 1}的文法。
文法 G=({S1},{a,b},{S1?ab | aS1b},S1)
产生的语言 {anbn | n? 1}形式上看起来与语言
{anbncn| n? 1}比较接近 。
G=({S2},{c},{S2?c | cS2},S2)产生的语言是 {cn|n? 1}。
{anbncn | n? 1}≠{a nbn | n? 1}{cn | n? 1}
2009-7-26 154
2.3 文法的构造文法
S?S1S2
S1?ab | aS1b
S2?c | cS2
不能产生语言
{anbncn | n? 1}
而是产生语言
{anbn | n?1}{c n | n?1}
2009-7-26 155
2.3 文法的构造文法
G,S?abc | aSbc
产生的语言为:
{an(bc)n | n? 1}
焦点:交换 b和 c的位置。
2009-7-26 156
2.3 文法的构造
G14,S?aBC | aSBC,
CB?BC
aB?ab
bB?bb
bC?bc
cC?cc
G14′,S?abc|aSBc,
bB?bb
cB?Bc
2009-7-26 157
文法的乔姆斯基体系
文法 G=(V,T,P,S)
G叫做 0型文法 (type 0 grammar),也叫做短语结构文法 (phrase structure grammar,
PSG)。
L(G)叫做 0型语言 。也可以叫做 短语结构语言 (PSL)、递归可枚举集 (recursively
enumerable,r.e,)。
2009-7-26 158
文法的乔姆斯基体系
G是 0型文法。
如果对于?α?β ∈ P,均有 |β |? |α |成立,则称 G为 1型文法 (type 1 grammar),
或 上下文有关文法 (context sensitive
grammar,CSG)。
L(G)叫做 1型语言 (type 1 language)或者上下文有关语言 (context sensitive
language,CSL)。
2009-7-26 159
文法的乔姆斯基体系
G是 1型文法
如果对于?α?β ∈ P,均有 |β |? |α |,并且
α ∈ V成立,则称 G为 2型文法 (type 2
grammar),或 上下文无关文法 (context free
grammar,CFG)。
L(G)叫做 2型语言 (type 2 language)或者 上下文无关语言 (context free language,CFL)。
2009-7-26 160
文法的乔姆斯基体系
G是 2型文法
如果对于?α?β ∈ P,α?β 均具有形式
A?w
A?wB
其中 A,B∈ V,w∈ T+。 则称 G为 3型文法
(type 3 grammar),也可称为 正则文法
(regular grammar,RG)或者正规文法 。
L(G)叫做 3型语言 (type 3 language),也可称为 正 则 语 言 或者 正 规 语 言 (regular
language,RL)。
2009-7-26 161
文法的乔姆斯基体系
⑴ 如果一个文法 G是 RG,则它也是 CFG、
CSG和短语结构文法 。 反之不一定成立 。
⑵ 如果一个文法 G是 CFG,则它也是 CSG和短语结构文法 。 反之不一定成立 。
⑶ 如果一个文法 G是 CSG,则它也是短语结构文法 。 反之不一定成立 。
相应地:
⑷ RL也是 CFL,CSL和短语结构语言 。 反之不一定成立 。
2009-7-26 162
文法的乔姆斯基体系
⑸ CFL也是 CSL和短语结构语言 。 反之不一定成立 。
⑹ CSL也是短语结构语言 。 反之不一定成立
⑺ 当文法 G是 CFG时,L(G)却可以是 RL。
⑻ 当文法 G是 CSG时,L(G)可以是 RL,CSL。
⑼ 当文法 G是短语结构文法时,L(G)可以是
RL,CSL和 CSL。
2009-7-26 163
文法的乔姆斯基体系定理 2-1 L是 RL的充要条件是存在一个文法,
该文法产生语言 L,并且它的产生式要么是形如,A?a的产生式,要么是形如 A?aB的产生式。其中 A,B为语法变量,a为终极符号。
证明,
– 充分性:设有 G′,L(G′ )=L,且 G′ 的产生式的形式满足定理要求。这种文法就是 RG。所以,
G′ 产生的语言就是 RL,故 L是 RL。
2009-7-26 164
文法的乔姆斯基体系
必要性构造:用 产生式组:
A?a1A1
A1?a2A2
…
An-1?an
代替产生式
A? a1a2… an
2009-7-26 165
文法的乔姆斯基体系
用 产生式组
A?a1A1
A1?a2A2
…
An-1?anB
代替产生式
A? a1a2… an B
2009-7-26 166
文法的乔姆斯基体系
证明 L(G′ )=L(G) 。
施归纳于推导的步数,证明一个更一般的结论:对于?A∈ V,A?G+ x?A?
G′ + x。因为 S∈ V,所以结论自然对 S成立。
2009-7-26 167
文法的乔姆斯基体系
几点注意事项
⑴ 我们是按照 RG的一般定义来构造一个与之等价的文法的,这与读者以前熟悉的根据一个具体的对象构造另一个对象是不同的 。 在这里,可以使用的是非常一般的条件 ——一个一般模型 。 这也是这类问题的证明所要求的 。 而且在本书的后面,将会有更多这样的情况 。
2009-7-26 168
文法的乔姆斯基体系
⑵ 为了证明一个特殊的结论,可以通过证明一个更为一般的结论来完成 。 这从表面上好像是增加了我们要证明的内容,但实际上它会使我们能够更好地使用归纳假设,
以便顺利地获得我们所需要的结论 。
2009-7-26 169
文法的乔姆斯基体系
⑶ 施归纳于推导的步数是证明本书中不少问题的较为有效的途径 。 有时我们还会对字符串的长度施归纳 。
本证明的主要部分含两个方面,首先是构造,
然后对构造的正确性进行证明 。 这种等价性证明的思路是非常重要的 。
2009-7-26 170
文法的乔姆斯基体系
线性文法 (liner grammar)
– 设 G=(V,T,P,S),如果对于?α?β ∈ P,
α?β 均具有如下形式:
– A?w
– A?wBx
– 其中 A,B∈ V,w,x∈ T*,则称 G为 线性文法。
线性语言 (liner language)
– L(G)叫做 线性语言
2009-7-26 171
文法的乔姆斯基体系
右线性文法 (right liner grammar)
– 设 G=(V,T,P,S),如果对于?α?β ∈ P,
α?β 均具有如下形式:
– A?w
– A?wB
– 其中 A,B∈ V,w,x∈ T*,则称 G为 线性文法。
右线性语言 (right liner language)
– L(G)叫做右 线性语言。
2009-7-26 172
文法的乔姆斯基体系
左线性文法 (left liner grammar)
– 设 G=(V,T,P,S),如果对于?α?β ∈ P,
α?β 均具有如下形式:
– A?w
– A?Bw
– 其中 A,B∈ V,w,x∈ T*,则称 G为 线性文法。
左线性语言 (left liner language)
– L(G)叫做右 线性语言。
2009-7-26 173
文法的乔姆斯基体系定理 2-2 L是一个左线性语言的充要条件是存在文法 G,G中的产生式要么是形如,A?a
的产生式,要么是形如 A?Ba的产生式,使得 L(G)=L。其中 A,B为语法变量,a为终极符号。
2009-7-26 174
文法的乔姆斯基体系定理 2-3 左线性文法与右线性文法等价。
按照定理 2-1的证明经验,要想证明本定理,
需要完成如下工作:
– 对任意右线性文法 G,我们能够构造出对应的左线性文法 G′,使得 L(G′ )=L(G);
– 对任意左线性文法 G,我们能够构造出对应的右线性文法 G′,使得 L(G′ )=L(G)。
2009-7-26 175
文法的乔姆斯基体系
例 2-17 语言 {0123456}的左线性文法和右线性文法的构造。
右线性文法
Gr,Sr?0Ar
Ar?1Br
Br?2Cr
Cr?3Dr
Dr?4Er
Er?5Fr
Fr?6
2009-7-26 176
文法的乔姆斯基体系
0123456在文法 Gr中的推导
Sr?0Ar 使用产生式 Sr?0Ar
01Br 使用产生式 Ar?1Br
012Cr 使用产生式 Br?2Cr
0123Dr 使用产生式 Cr?3Dr
01234Er 使用产生式 Dr?4Er
012345Fr 使用产生式 Er?5Fr
0123456 使用产生式 Fr?6
2009-7-26 177
文法的乔姆斯基体系
左线性文法
Gl,Sl?Al6
Al?Bl5
Bl?Cl4
Cl?Dl3
Dl?El2
El?Fl1
Fl?0
2009-7-26 178
文法的乔姆斯基体系
2009-7-26 179
文法的乔姆斯基体系
0123456在文法 Gl中的推导
Sl?Al6 使用产生式 Sl?Al6
Bl56 使用产生式 Al?Bl5
Cl456 使用产生式 Bl?Cl4
Dl3456 使用产生式 Cl?Dl3
El23456 使用产生式 Dl?El2
Fl1234456 使用产生式 El?Fl1
0123456 使用产生式 Fl?0
2009-7-26 180
文法的乔姆斯基体系
0123456被归约成文法 Gl的开始符号 S
0123456
Fl1234456 使用产生式 Fl?0
El23456 使用产生式 El?Fl1
Dl3456 使用产生式 Dl?El2
Cl456 使用产生式 Cl?Dl3
Bl56 使用产生式 Bl?Cl4
Al6 使用产生式 Al?Bl5
Sl 使用产生式 Sl?Al6
2009-7-26 181
文法的乔姆斯基体系
2009-7-26 182
文法的乔姆斯基体系定理 2-4 左线性文法的产生式与右线性文法的产生式混用所得到的文法不是 RG。
证明:设有文法
G15,S?0A
A?S1|1
不难看出,L(G15)={0n1n|n? 1}。我们构造不出
RG G,使得 L(G)= L(G15)={0n1n|n? 1}。因为
L(G15)={0n1n|n? 1}不是 RL。所以,G15不是 RG。
有关该语言不是 RL的证明我们将留到研究 RL的性质时去完成。
2009-7-26 183
2.5 空语句
形如 A?ε 的产生式叫做空产生式,也可叫做 ε 产生式。
在 RG,CFG,CSG中,都不能含有空产生式。所以,任何 CSL中都不含有空语句 ε 。
从而 CFL和 RL中都不能含空语句 ε 。
空语句 ε 在一个语言中的存在并不影响该语言的有穷描述的存在性,甚至除了为生成空语句 ε 外,空产生式可以不被用于语言中其他任何句子的推导中。
2009-7-26 184
2.5 空语句
允许 CSL,CFL,RL包含空语句 ε 后,还会给我们进行问题的处理提供一些方便。
允许在 RG,CFG,CSG中含有空产生式
允许 CSL,CFL,RL包含空语句 ε 。
2009-7-26 185
2.5 空语句定理 2-5 设 G=(V,T,P,S)为一文法,则存在与 G同类型的文法 G′ =(V′,T,P′,S′ ),使得
L(G)=L(G′ ),但 G′ 的开始符号 S′ 不出现在 G′
的任何产生式的右部。
证明:
构造当文法 G=(V,T,P,S)的开始符号 S不出现在 P中的任何产生式的右部时,G就是所求
G′=(V∪ {S′},T,P′,S′)
P′ =P∪ {S′?α |S?α ∈ P}
2009-7-26 186
2.5 空语句
证明 L(G)?L(G′ )
对任意的 x∈ L(G′ ),由文法产生的语言的定义知,在 G′ 中存在如下推导:
S′?α 使用产生式 S′?α
*x 使用 P′ 中的除 S′?α 以外的其他产生式。
在推导 α?*x中使用的产生式都是 P中的产生式。因此,推导 α?*x在 G中仍然成立。
2009-7-26 187
2.5 空语句由 P′ 的定义知,必有 S?α ∈ P
所以,
S?α 使用 P中的产生式 S?α
*x 使用 P中的产生式故,
L(G′ )?L(G)
2009-7-26 188
2.5 空语句设 G中存在如下推导:
S?α 使用 P中的产生式 S?α
*x 使用 P中的产生式由 P′ =P∪ {S′?α |S?α ∈ P },知道 G′ 中,
S′?α 使用产生式 S′?α
*x 使用 P′ 所包含的 P中的其他产生式。
故,L(G)?L(G′ )。
2009-7-26 189
2.5 空语句设 G=(V,T,P,S)是一个文法,如果 S不出现在 G
的任何产生式的右部,则:
⑴ 如果 G是 CSG,则仍然称 G=(V,T,P∪ {S?ε },
S)为 CSG; G产生的语言仍然称为 CSL。
⑵ 如果 G是 CFG,则仍然称 G=(V,T,P∪ {S?ε },
S)为 CFG; G产生的语言仍然称为 CFL。
⑶ 如果 G是 RG,则仍然称 G=(V,T,P∪ {S?ε },
S)为 RG。 G产生的语言仍然称为 RL。
2009-7-26 190
2.5 空语句定理 2-6下列命题成立:
⑴ 如果 L是 CSL,则 L∪ {ε }仍然是 CSL。
⑵ 如果 L是 CFL,则 L∪ {ε }仍然是 CFL。
⑶ 如果 L是 RL,则 L∪ {ε }仍然是 RL。
2009-7-26 191
2.5 空语句证明:对第 1个命题:设 L是 CSL,则存在一个 CSG G=(V,T,P,S),使得 L(G)=L。
由定理 2-5-1,我们不妨假设 S不出现在 G的任何产生式的右部 。
取:
G′ =(V,T,P∪ {S?ε },S)
由于 S不出现在 G的任何产生式的右部,所以,
S?ε 不可能出现在任何长度不为 0的句子的推导中 。
2009-7-26 192
2.5 空语句易证:
L(G′ )=L(G)∪ {ε }。
由于 G′ 是 CSG,所以,L(G)∪ {ε }是 CSL。
同理可证第 2和第 3个命题。
2009-7-26 193
2.5 空语句定理 2-7 下列命题成立
⑴ 如果 L是 CSL,则 L-{ε }仍然是 CSL。
⑵ 如果 L是 CFL,则 L-{ε }仍然是 CFL。
⑶ 如果 L是 RL,则 L-{ε }仍然是 RL。
2009-7-26 194
2.5 空语句证明:对第 1个命题:设 L是 CSL,则存在一个 CSG G=(V,T,P,S),使得 L(G)=L。
如果 ε?L,则 L-{ε }=L,所以,L-{ε }是
CSL。
如果 ε ∈ L,由定理 2-5-1,我们不妨假设 S不出现在 G的任何产生式的右部 。 取:
G′ =(V,T,P-{S?ε },S)
2009-7-26 195
2.5 空语句由于 S不出现在 G的任何产生式的右部,所以,
如果 L(G)中存在长度非 0的句子,S?ε 不可能出现在它们的推导中 。 也就是说,将
S?ε 从 G中去掉后,不会影响 L(G)中任何长度非 0的句子的推导 。 容易证明:
L(G′ )=L(G)-{ε }
由于 G′ 是 CSG,所以,L(G)-{ε }是 CSL。
同理可证其他两个命题。
2009-7-26 196
2.5 空语句
对于任意文法 G=(V,T,P,S),对于 G中的其他变量 A,出现形如 A?ε 的产生式是不会改变文法产生的语言的类型的,而且这样一来,对我们进行文法的构造等工作还提供了很多方便。所以,我们约定:对于 G中的任何变量 A,在需要的时候,可以出现形如 A?ε 的产生式。
2009-7-26 197
2.6 小结本章讨论了语言的文法描述。首先介绍文法的基本定义和推导、归约、文法定义的语言、句子、句型、文法的等价等重要概念。讨论了如何根据语言的特点、通过用语法变量去表示适当的集合(语法范畴)的方法进行文法构造,并按照乔姆斯基体系,将文法划分成 PSG,CSG,CFG、
RG等 4类。在这些文法中,线性文法是一类重要的文法。
2009-7-26 198
2.6 小结
⑴ 文法 G=(V,T,P,S)。 任意 A∈ V表示集合 L(A)={w | w∈ T*且 A?* w}。
⑵ 推导与归约 。 文法中的推导是根据文法的产生式进行的 。 如果 α?β ∈ P,γ,
δ ∈ (V∪ T)*,则称 γ α δ 在 G中直接推导出 γ β δ,γ α δ?G γ β δ ;也称
γ β δ 在文法 G中直接归约成 γ α δ 。
2009-7-26 199
2.6 小结
⑶ 语言,句子和句型 。 文法 G产生的语言
L(G)={w | w∈ T*且 S?* w},w∈ L(G)为句子 。 一般地,由开始符号推出来的任意符号行叫做 G的句型 。
⑷ 一个语言可以被多个文法产生,产生相同语言的文法被称是等价的 。
2009-7-26 200
2.6 小结
⑸ 右线性文法的产生式都可以是形如 A?a和
A?aB的产生式。左线性文法的产生式都可以是形如 A?a和 A?Ba的产生式。左线性文法与右线性文法是等价的。然而,左线性文法的产生式与右线性文法的产生式混用所得到的文法不是正则文法。
2009-7-26 201
第 3章 有穷状态自动机
主要内容
确定的有穷状态自动机 (DFA)
– 作为对实际问题的抽象,直观物理模型,形式定义,DFA接受的句子,语言,状态转移图 。
不确定的有穷状态自动机 (NFA)
– 定义;
– NFA与 DFA的等价性;
2009-7-26 202
第 3章 有穷状态自动机
带空移动的有穷状态自动机 (ε-NFA)
– 定义 。
– ε-NFA与 DFA的等价性 。
FA是正则语言的识别器
– 正则文法 (RG)与 FA的等价性 。
– 相互转换方法 。
– 带输出的有穷状态自动机 。
– 双向有穷状态自动机 。
2009-7-26 203
第 3章 有穷状态自动机
重点,DFA的概念,DFA,NFA,ε-NFA,
RG之间的等价转换思路与方法 。
难点:对 DFA概念的理解,DFA,RG的构造方法,RG与 FA的等价性证明 。
2009-7-26 204
3.1 语言的识别
推导和归约中的回溯问题将对系统的效率产生极大的影响
S?aA|aB
A?aA|c
B?aB|d
分析句子 aaac的过程中可能需要回溯 。
2009-7-26 205
3.1 语言的识别
系统识别语言 {anc|n≥1}∪ {and|n≥1}的字符串过程中状态的变化图示如下:
2009-7-26 206
3.1 语言的识别
识别系统 (模型 )
⑴ 系统具有有穷个状态,不同的状态代表不同的意义。按照实际的需要,系统可以在不同的状态下完成规定的任务。
⑵ 我们可以将输入字符串中出现的字符汇集在一起构成一个字母表。系统处理的所有字符串都是这个字母表上的字符串。
2009-7-26 207
3.1 语言的识别
⑶ 系统在任何一个状态 (当前状态 )下,从输入字符串中读入一个字符,根据当前状态和读入的这个字符转到新的状态。当前状态和新的状态可以是同一个状态,也可以是不同的状态;当系统从输入字符串中读入一个字符后,它下一次再读时,会读入下一个字符。这就是说,相当于系统维持有一个读写指针,该指针在系统读入一个字符后指向输入串的下一个字符。
2009-7-26 208
3.1 语言的识别
⑷ 系统中有一个状态,它是系统的开始状态,系统在这个状态下开始进行某个给定句子的处理。
⑸ 系统中还有一些状态表示它到目前为止所读入的字符构成的字符串是语言的一个句子,把所有将系统从开始状态引导到这种状态的字符串放在一起构成一个语言,
该语言就是系统所能识别的语言。
2009-7-26 209
3.1 语言的识别
相应的物理模型一个右端无穷的输入带。
一个有穷状态控制器 (finite state control,FSC) 。
一个读头。
系统的每一个动作由三个节拍构成:读入读头正注视的字符;根据当前状态和读入的字符改变有穷控制器的状态;将读头向右移动一格。
2009-7-26 210
3.1 语言的识别
有穷状态自动机的物理模型
2009-7-26 211
3.2有穷状态自动机
有穷状态自动机 (finite automaton,FA)
M=(Q,∑,δ,q0,F)
Q——状态的非空有穷集合 。q∈ Q,q称为
M的一个 状态 (state)。
∑——输入字母表 (Input alphabet)。输入字符串都是 ∑上的字符串。
q0——q0∈ Q,是 M的 开始状态 (initial state),
也可叫做初始状态或者启动状态 。
2009-7-26 212
3.2有穷状态自动机
δ——状态 转移函数 (transition function),
有时候又叫做状态转换函数或者移动函数。
δ,Q× ∑?Q,对?(q,a)∈ Q× ∑,δ(q,
a)=p表示,M在状态 q读入字符 a,将状态变成 p,并将读头向右移动一个带方格而指向输入字符串的下一个字符。
F——F?Q,是 M的 终止状态 (final state)集合。q∈ F,q称为 M的 终止状态,又称为接受状态 (accept state)。
2009-7-26 213
3.2有穷状态自动机
例 3-1 下面是一个有穷状态自动机
M1=({q0,q1,q2},{0},δ1,q0,{q2})
其中,δ1(q0,0)= q1,δ1(q1,0)= q2,δ1(q2,0)= q1
用表 3-1表示 δ1。
状态说明 状态 输入字符
0
开始状态 q0 q1
q1 q2
终止状态 q2 q1
2009-7-26 214
3.2有穷状态自动机
M2=({q0,q1,q2,q3},{0,1,2},δ 2,q0,{q2})
δ 2(q0,0)= q1,δ 2(q1,0)= q2
δ 2(q2,0)= q1,δ 2(q3,0)= q3
δ 2(q0,1)= q3,δ 2(q1,1)= q3
δ 2(q2,1)= q3,δ 2(q3,1)= q3
δ 2(q0,2)= q3,δ 2(q1,2)= q3
δ 2(q2,2)= q3,δ 2(q3,2)= q3
2009-7-26 215
3.2有穷状态自动机状态说明 状态 输入字符
0 1 2
开始状态 q0 q1 q3 q3
q1 q2 q3 q3
终止状态 q2 q1 q3 q3
q3 q3 q3 q3
表 3-2 δ 2转换函数
2009-7-26 216
3.2有穷状态自动机
将 δ 扩充为
QQ *:
对任意的 q∈ Q,w∈∑ *,a∈∑,定义
)),,(?(),(?)2(
),(?)1(
awqwaq
2009-7-26 217
3.2有穷状态自动机
),(
)),,(?(
),(?),(?
aq
aq
aqaq
两值相同,不用区分这两个符号。
2009-7-26 218
3.2有穷状态自动机
确定的有穷状态自动机
– 由于对于任意的 q∈ Q,a∈∑,δ (q,a)均有确定的值,所以,将这种 FA称为 确定的有穷状态自动机 (deterministic finite automaton,
DFA)
2009-7-26 219
3.2有穷状态自动机
M接受 (识别 )的语言对于?x∈∑ *如果 δ (q,w)∈ F,则称 x被 M接受,
如果 δ (q,w)?F,则称 M不接受 x。
L(M)={x| x∈∑ *且 δ (q,w)∈ F}
称为由 M接受 (识别 )的语言
L(M1)= L(M2)={02n|n? 1}
如果 L(M1)=L(M2),则称 M1与 M2等价。
2009-7-26 220
3.2有穷状态自动机
例 3-2 构造一个 DFA,它接受的语言为
{x000y|x,y∈ {0,1}*}
q0——M的启动状态;
q1——M读到了一个 0,这个 0可能是子串,000”的第 1个 0;
q2——M在 q1后紧接着又读到了一个 0,这个 0可能是子串,000”的第 2个 0;
q3——M在 q2后紧接着又读到了一个 0,发现输入字符串含有子串,000”;因此,这个状态应该是终止状态 。
2009-7-26 221
3.2有穷状态自动机
δ (q0,1)= q0——M在 q0读到了一个 1,它需要继续在 q0,等待,可能是子串,000”的第 1
个 0的输入字符 0;
δ (q1,1)= q0——M在刚刚读到了一个 0后,读到了一个 1,表明在读入这个 1之前所读入的 0并不是子串,000”的第 1个 0,因此,M
需要重新回到状态 q0,以寻找子串,000”的第 1个 0;
2009-7-26 222
3.2有穷状态自动机
δ (q2,1)= q0——M在刚刚发现了 00后,读到了一个 1,表明在读入这个 1之前所读入的 00并不是子串,000”的前两个 0,因此,M需要重新回到状态 q0,以寻找子串,000”的第 1个 0;
δ (q3,0)= q3——M找到了子串,000”,只用读入该串的剩余部分 。
δ (q3,1)= q3——M找到了子串,000”,只用读入该串的剩余部分 。
2009-7-26 223
3.2有穷状态自动机
M=({q0,q1,q2,q3},{0,1},{ (q0,0)= q1,
δ (q1,0)= q2,δ (q2,0)= q3,δ (q0,1)= q0,
δ (q1,1)= q0,δ (q2,1)= q0,δ (q3,0)= q3,
δ (q3,1)= q3},q0,{q3})
状态说明 状态 输入字符
0 1
开始状态 q0 q1 q0
q1 q2 q0
q2 q3 q0
终止状态 q3 q3 q3
2009-7-26 224
3.2有穷状态自动机
一种更为直观的表示
2009-7-26 225
3.2有穷状态自动机
状态转移图 (transition diagram)
⑴ q∈ Q? q是该有向图中的一个顶点;
⑵ δ (q,a)=p? 图中有一条从顶点 q到顶点 p的标记为 a的弧;
⑶ q∈ F? 标记为 q的顶点被用双层圈标出;
⑷ 用标有 S的箭头指出 M的开始状态 。
状态转移图又可以叫做 状态转换图。
2009-7-26 226
3.2有穷状态自动机
例 3-3构造一个 DFA,它接受的语言为
{x000|x∈ {0,1}*}。
– 状态 q0读到的 0可能是输入字符串的最后三个 0
的第 1个 0;
– 在状态 q1紧接着读到的 0可能是输入字符串的最后三个 0的第 2个 0;
– 在状态 q2紧接着读到的 0可能是输入字符串的最后三个 0的第 3个 0;
2009-7-26 227
3.2有穷状态自动机
– 在状态 q3紧接着读到的 0也可能是输入字符串的最后三个 0的第 3个 0;
– 如果在状态 q1,q2,q3读到的是 1,则要重新检查输入串是否以三个 0结尾。
2009-7-26 228
3.2有穷状态自动机
几点值得注意
⑴ 定义 FA时,常常只给出 FA相应的状态转移图就可以了。
⑵ 对于 DFA来说,并行的弧按其上的标记字符的个数计算,对于每个顶点来说,它的出度恰好等于输入字母表中所含的字符的个数。
2009-7-26 229
3.2有穷状态自动机
⑶ 不难看出,字符串 x被 FA M接受的充分必要条件是,在 M的状态转移图中存在一条从开始状态到某一个终止状态的有向路,
该有向路上从第 1条边到最后一条边的标记依次并置而构成的字符串 x。简称此路的标记为 x。
⑷ 一个 FA可以有多于 1个的终止状态。
2009-7-26 230
3.2有穷状态自动机接受语言 {x000|x∈ {0,1}*}∪ {x001|x∈ {0,1}*}的 FA
2009-7-26 231
3.2有穷状态自动机
即时描述 (instantaneous description,
ID )
– x,y∈∑ *,δ (q0,x)=q,xqy称为 M的一个 即时描述,表示 xy是 M正在处理的一个字符串,x
引导 M从 q0启动并到达状态 q,M当前正注视着
y的首字符。
– 如果 xqay是 M的一个即时描述,且 δ (q,a)=p,
则 xqay ├ M xapy。
2009-7-26 232
3.2有穷状态自动机
α ├ Mn β,表示 M从即时描述 α 经过 n次移动到达即时描述 β 。
M存在即时描述 α 1,α 2,……,α n-1,使得
α ├ M α 1,α 1├ M α 2,…,α n-1├ Mβ
当 n=0时,有 α =β 。即 α ├ M 0 α 。
α├M + β:表示 M从即时描述 α经过至少 1次移动到达即时描述 β。
α ├ M * β,表示 M从即时描述 α 经过若干步移动到达即时描述 β 。
2009-7-26 233
3.2有穷状态自动机
当意义清楚时,我们将符号 ├ M,├ Mn、
├ M*,├ M+中的 M省去,分别用 ├,├ n、
├ *,├ +表示。
2009-7-26 234
3.2有穷状态自动机对下图所示的 DFA有如下的 ID转换:
2009-7-26 235
3.2有穷状态自动机
q01010010001├ 1q0010010001
├ 10q110010001
├ 101q00010001
├ 1010q1010001
├ 10100q210001
├ 101001q00001
├ 1010010q1001
├ 10100100q201
2009-7-26 236
3.2有穷状态自动机
├ 101001000q31
├ 1010010001q0
即 q01010010001├ 101010010001q0
q01010010001├ +1010010001q0
q01010010001├ *1010010001q0
2009-7-26 237
3.2有穷状态自动机
对于 x∈∑ *,
q0x1├ + x1q0
q0x10├ + x10q1
q0x100├ + x100q2
q0x000├ + x000q3
2009-7-26 238
3.2有穷状态自动机能引导 FA从开始状态到达 q的字符串的集合为:
set(q)={x | x∈∑ *,δ (q0,x)=q}
对图 3-3所给的 DFA中的所有 q,求 set(q)。
2009-7-26 239
set(q0)={x | x∈∑ *,x=ε 或者 x以 1结尾 }
set(q1)={x | x∈∑ *,x=0或者 x以 10结尾 }
set(q2)={x | x∈∑ *,x=00或者 x以 100结尾 }
set(q3)={x | x∈∑ *,x以 000结尾 }
set(q4)={x | x∈∑ *,x以 001结尾 }
这 5个集合是两两互不相交 。
2009-7-26 240
3.2有穷状态自动机
对于任意一个 FA M=(Q,∑,δ,q0,F)
我们可以按照如下方式定义关系 RM:
对?x,y∈∑ *,xRMyq∈ Q,使得
x∈ set(q)和 y∈ set(q)同时成立 。
按照这个定义所得到的关系实际上是 ∑ *上的一个等价关系。利用这个关系,可以将
∑ *划分成不多于 |Q|个等价类。
2009-7-26 241
3.2有穷状态自动机
例 3-4 构造一个 DFA,它接受的语言为 {0n1m2k|n,m,k? 1}。
q0——M的启动状态;
q1——M读到至少一个 0,并等待读更多的 0;
q2——M读到至少一个 0后,读到了至少一个
1,并等待读更多的 1;
q3——M读到至少一个 0后跟至少一个 1后,
并且接着读到了至少一个 2。
2009-7-26 242
3.2有穷状态自动机
先设计“主体框架”
再补充细节
2009-7-26 243
3.2有穷状态自动机
⑴ 当 FA一旦进入状态 qt,它就无法离开此状态。所以,qt相当于一个陷阱状态 (trap)。
一般地,我们将陷阱状态用作在其他状态下发现输入串不可能是该 FA所识别的语言的句子时进入的状态。在此状态下,FA读完输入串中剩余的字符。
2009-7-26 244
3.2有穷状态自动机
⑵ 在构造一个识别给定语言的 FA时,用画图的方式比较方便、直观。我们可以先根据语言的主要特征画出该 FA的,主体框架,,然后再去考虑画出一些细节要求的内容。
2009-7-26 245
3.2有穷状态自动机
⑶ FA的状态具有一定的记忆功能:不同的状态对应于不同的情况,由于 FA只有有穷个状态,所以,在识别一个语言的过程中,
如果有无穷种情况需要记忆,我们肯定是无法构造出相应的 FA的。
2009-7-26 246
3.2有穷状态自动机
例 3-5构造一个 DFA,它接受的语言为 {x|x∈ {0,1}*,且当把 x看成二进制数时,x模 3与 0同余 }。
q0——对应除以 3余数为 0的 x组成的等价类;
q1——对应除以 3余数为 1的 x组成的等价类;
q2——对应除以 3余数为 2的 x组成的等价类;
qs——M的开始状态 。
2009-7-26 247
3.2有穷状态自动机
qs——在此状态下读入 0时,有 x=0,所以应该进入状态 q0;读入 1时,有 x=1,所以应该进入状态 q1。即,δ (qs,0)= q0; δ (qs,
1)= q1 。
2009-7-26 248
3.2有穷状态自动机
q0——能引导 M到达此状态的 x除以 3余 0,
所以有,x=3*n+0。
读入 0时,引导 M到达下一个状态的字符串为 x0,x0=2*(3*n+0)=3*2*n+0 。 所以,
δ (q0,0)= q0;
读入 1时,M到达下一个状态的字符串为 x1,
x1=2*(3*n+0)+1=3*2*n+1。所以,δ (q0,
1)= q1;
2009-7-26 249
3.2有穷状态自动机
q1——能引导 M到达此状态的 x除以 3余 1,
所以有,x=3*n+1。
读入 0时,引导 M到达下一个状态的字符串为 x0,x0=2*(3*n+1)=3*2*n+2。 所以即:
δ (q1,0)= q2;
读入 1时,引导 M到达下一个状态的字符串为 x1,
x1=2*(3*n+1)+1=3*2*n+2+1=3*(2*n+1)。
所以 δ (q1,1)= q0
2009-7-26 250
3.2有穷状态自动机
q2——能引导 M到达此状态的 x除以 3余 2,所以:
x=3*n+2。
读入 0时,引导 M到达下一个状态的字符串为 x0,
x0=2*(3*n+2)=3*2*n+4=3*(2*n+1)+1。 所以 δ (q2,
0)= q1;
读入 1时,引导 M到达下一个状态的字符串为 x1,
x1=2*(3*n+2)+1=3*2*n+4+1=3*(2*n+1)+2。所以,
δ (q2,1)= q2 。
2009-7-26 251
3.2有穷状态自动机
接受语言 {x|x∈ {0,1}*,且当把 x看成二进制数时,x模 3与 0同余 }的 DFA如下:
2009-7-26 252
3.2有穷状态自动机
例 3-6 构造一个 DFA,它接受的语言
L={x|x∈ {0,1}*,且对 x中任意一个长度不大于 5的子串 a1a2… an,
a1+a2+… +an? 3,n? 5} 。
输入串为 a1a2… ai… ai+4ai+5… am
2009-7-26 253
3.2有穷状态自动机
当 i=1,2,3,也就是 M读到输入串的第 1、
2,3个字符时,它需要将这些字符记下来。
因为 a1…… ai可能需要用来判定输入串的最初 4~5个字符组成的子串是否满足语言的要求。
当 i=4,5,也就是 M读到输入串的第 4,5个字符时,在 a1+a2+…… +ai? 3的情况下,M
需要将 a1…… ai记下来;在 a1+a2+…… +ai>3
时,M应该进入陷阱状态 qt。
2009-7-26 254
3.2有穷状态自动机
当 i=6,也就是 M读到输入串的第 6个字符,
此时,以前读到的第 1个字符 a1就没有用了,
此时它要看 a2+a3+… +a6? 3是否成立,如果成立,M需要将 a2… a6记下来;在
a2+a3+… +ai>3时,M应该进入陷阱状态 qt。
2009-7-26 255
3.2有穷状态自动机
当 M完成对子串 a1a2… ai… ai+4的考察,并发现它满足语言的要求时,M记下来的是
ai… ai+4,此时它读入输入串的第 i+5个字符
ai+5,以前读到的第 i个字符 ai就没有用了,
此时它要看 ai+1+ai+2+… +ai+5? 3是否成立,
如果成立,M需要将 ai+1,ai+2,…,ai+5记下来;在 ai+1+ai+2+… +ai+5>3时,M应该进入陷阱状态 qt。
2009-7-26 256
3.2有穷状态自动机
M需要记忆的内容有:
什么都未读入 ——20=1种;
记录有 1个字符 ——21=2种;
记录有 2个字符 ——22=4种;
记录有 3个字符 ——23=8种;
记录有 4个字符 ——24-1=15种;
记录有 5个字符 ——25-6=26种;
记录当前的输入串不是句子 ——1种。
2009-7-26 257
3.2有穷状态自动机状态设置
q[ε ]——M还未读入任何字符;
qt——陷阱状态;
q[a1a2… ai]——M记录有 i个字符,1? i? 5。 a1,
a2,…,ai∈ {0,1}。
取 DFA M=(Q,{0,1},δ,q[ε ],F)
F={ q[ε ] }∪ { q[a1a2… ai]| a1,a2,…,ai∈ {0,1}且
1? i? 5且 a1+a2+… +ai? 3}
Q={qt }∪ F
2009-7-26 258
3.2有穷状态自动机
δ (q[ε ],a1)=q[a1]
δ (q[a1],a2)=q[a1a2]
δ (q[a1a2],a3)=q[a1a2a3]
q[a1a2a3a] 如果 a1+a2+a3+a? 3
δ (q[a1a2a3],a)=
qt 如果 a1+a2+a3+a>3
2009-7-26 259
3.2有穷状态自动机
q[a1a2a3a4a] 如果 a1+a2+a3+a4+a? 3
δ (q[a1a2a3a4],a)=
qt 如果 a1+a2+a3+a4+a>3
q[a2a3a4a5a] a2+a3+a4+ a5+a? 3
δ (q[a1a2a3a4a5],a)=
qt 如果 a2+a3+a4+ a5+a>3
δ (qt,a1)=qt
2009-7-26 260
3.3 NFA
3.3.1 作为对 DFA的修改
希望是接受 {x|x∈ {0,1}*,且 x含有子串 00
或 11}的 FA如下:
2009-7-26 261
3.3.1 作为对 DFA的修改
希望是接受 {x|x∈ {0,1}*,且 x 的倒数第 10
个字符为 1}的 FA如下,
2009-7-26 262
3.3.1 作为对 DFA的修改
这两个图所给的,FA”与前面我们所定义的 FA,即 DFA,的区别在于:
⑴ 并不是对于所有的 (q,a)∈∑ × Q,δ (q,
a)都有一个状态与它对应;
⑵ 并不是对于所有的 (q,a)∈∑ × Q,δ (q,
a)只对应一个状态。
,FA”在任意时刻可以处于有穷多个状态。
,FA”具有,智能,。
2009-7-26 263
3.3.2 NFA的形式定义
不确定的有穷状态自动机 (non-deterministic
finite automaton,NFA)
M是一个五元组
M=(Q,∑,δ,q0,F)
– Q,∑,q0,F的意义同 DFA。
– δ,Q× ∑?2Q,对?(q,a)∈ Q× ∑,δ(q,a)=
{p1,p2,…,pm}表示 M在状态 q读入字符 a,可以选择地将状态变成 p1,或者 p2,…,或者 pm,
并将读头向右移动一个带方格而指向输入字符串的下一个字符 。
2009-7-26 264
3.3.2 NFA的形式定义
FA的状态转移图,FA的状态对应的等价类、
FA的即时描述对 NFA都有效。
接受 {x|x∈ {0,1}*,且 x含有子串 00或 11}的 FA
对应的移动函数定义表。
2009-7-26 265
3.3.2 NFA的形式定义状态说明 状态 输入字符
0 1
启动状态 q0 {q0,q1} { q0,q2}
q1 {q3} Φ
q2 Φ {q3}
终止状态 q3 {q3} {q3}
2009-7-26 266
3.3.2 NFA的形式定义
接受 {x|x∈ {0,1}*,且 x 的倒数第 10个字符为 1}的 FA对应的移动函数定义表。
2009-7-26 267
3.3.2 NFA的形式定义状态说明 状态 输入字符
0 1
启动状态 q0 {q0 } {q0,q1}
q1 {q2} {q2}
q2 {q3} {q3}
q3 {q4} {q4}
q4 {q5} {q5}
q5 {q6} {q6}
q6 {q7} {q7}
q7 {q8} {q8}
q8 {q9} { q9}
q9 {q10} { q10}
终止状态 q10 Φ Φ
2009-7-26 268
3.3.2 NFA的形式定义
将 δ 扩充为
QQ 2:? *
对任意的 q∈ Q,w∈∑ *,a∈∑,定义
a ) },δ ( r∈p,使得w),(q ∈$r|{p),(?)2(
),(?)1(
waq
2009-7-26 269
3.3.2 NFA的形式定义
a)(q,
a)}(q,p|{p
a)}δ (r,∈p},{|{p
a)}δ (r,∈pε ),(q,∈r|{p
),(
),(
qr
aqaq
和关于 DFA的结论一样,两值相同,也不用区分这两个符号。
2009-7-26 270
3.3.2 NFA的形式定义
进一步扩充 δ 的定义域,δ,2Q× ∑ *?2Q。
对任意的 P?Q,w∈∑ *
Pq
wqwP
),(),(
2009-7-26 271
3.3.2 NFA的形式定义
由于,对?(q,w)∈ Q× ∑ *
),(
),()},({
}{
wq
wqwq
所以,不一定严格地区分 δ 的第 1个分量是一个状态还是一个含有一个元素的集合。
2009-7-26 272
3.3.2 NFA的形式定义
对任意的 q∈ Q,w∈∑ *,a∈∑,
δ (q,wa)=δ (δ (q,w),a)
对输入字符串 a1a2… an
δ (q,a1a2… an)=δ ((… δ (δ (q,a1),a2),… ),an) 。
2009-7-26 273
3.3.2 NFA的形式定义
M接受 (识别 )的语言
– 对于?x∈∑ *,如果 δ (q0,w) ∩ F≠ Φ,
则称 x被 M接受,如果 δ (q0,w)∩ F=Φ,
则称 M不接受 x。
–L(M)={x| x∈∑ *且 δ (q0,w) ∩ F≠ Φ },
称为由 M接受 (识别 )的语言 。
2009-7-26 274
3.3.3 NFA与 DFA等价
对于一个输入字符,NFA与 DFA的差异是前者可以进入若干个状态,而后者只能进入一个惟一的状态。虽然从 DFA看待问题的角度来说,NFA在某一时刻同时进入若干个状态,但是,这若干个状态合在一起的,总效果,相当于它处于这些状态对应的一个,综合状态,。因此,我们考虑让
DFA用一个状态去对应 NFA的一组状态。
2009-7-26 275
3.3.3 NFA与 DFA等价
NFA M1=(Q,∑,δ 1,q0,F1)与 DFA
M2=(Q2,∑,δ 2,q0′,F2)的对应关系:
– NFA从开始状态 q0启动,我们就让相应的 DFA
从状态 [q0]启动。所以 q0′ =[ q0]。
– 对于 NFA 的一个状态组 {q1,q2,…,qn},如果 NFA在此状态组时读入字符 a后可以进入状态组 {p1,p2,…,pm},则让相应的 DFA在状态
[q1,q2,…,qn]读入字符 a时,进入状态 [p1,
p2,…,pm]。
2009-7-26 276
3.3.3 NFA与 DFA等价定理 3-1 NFA与 DFA等价。
证明:
(1)构造与 M1等价的 DFA M2 。
M1=(Q,∑,δ 1,q0,F1)
M2=(Q2,∑,δ 2,[q0],F2)
Q2=2Q
F2={[p1,p2,…,pm]|{p1,p2,…,pm}?Q&{p1,
p2,…,pm}∩ F1≠ Φ }
2009-7-26 277
3.3.3 NFA与 DFA等价
δ 2([q1,q2,…,qn],a)=[p1,p2,…,pm]
δ 1({q1,q2,…,qn},a)= {p1,p2,…,
pm}
(2) 证明 δ 1(q0,x)= {p1,p2,…,pm}
δ 2([q0],x)=[p1,p2,…,pm]。
设 x∈∑ *,施归纳于 |x|
x=ε,δ 1(q0,ε )= {q0},δ 2([q0],ε )=[q0]
2009-7-26 278
3.3.3 NFA与 DFA等价设当 |x|=n是结论成立。下面证明当 |x|=n+1是结论也成立。不妨设 x=wa,|w|=n,a∈∑
δ1(q0,wa)=δ1(δ1(q0,w),a)
=δ1({q1,q2,…,qn},a)
={p1,p2,…,pm}
由归纳假设,
δ 1(q0,w)={q1,q2,…,qn}?δ 2([q0],
w)=[q1,q2,…,qn]
2009-7-26 279
3.3.3 NFA与 DFA等价根据 δ 2的定义,
δ 2([q1,q2,…,qn],a)=[p1,p2,…,pm]
δ 1({q1,q2,…,qn},a)={p1,p2,…,
pm}
所以,
δ 2([q0],wa)=δ 2(δ 2([q0],w),a)
=δ 2([q1,q2,…,qn],a)
=[p1,p2,…,pm]
2009-7-26 280
3.3.3 NFA与 DFA等价故,如果 δ 1(q0,wa)= {p1,p2,…,pm}则必有 δ 2([q0],wa)= [p1,p2,…,pm]。
由上述推导可知,反向的推导也成立 。 这就是说,结论对 |x|=n+1也成立 。
由归纳法原理,结论对?x∈∑ *成立。
2009-7-26 281
3.3.3 NFA与 DFA等价
(3) 证明 L(M1)=L(M2)
设 x∈ L(M1),且 δ 1(q0,x)= {p1,p2,…,
pm},
从而 δ 1(q0,x)∩ F1≠ Φ,
这就是说,{p1,p2,…,pm}∩ F1≠ Φ,
由 F2的定义,[p1,p2,…,pm]∈ F2。
2009-7-26 282
3.3.3 NFA与 DFA等价再由 (2)知,
δ 2([q0],x)=[p1,p2,…,pm]
所以,x∈ L(M2)。 故 L(M1)?L(M2)。
反过来推,可得 L(M2)? L(M1)。
从而 L(M1)=L(M2)得证 。
综上所述,定理成立。
2009-7-26 283
例 3-7 图 3-9所示的 NFA 对应的 DFA的状态转移函数如表 3-7所示。
图 3-9
2009-7-26 284
表 3-7 状态转移函数状态说明 状态 输入字符
0 1
启动? [q0] [q0,q1] [q0,q2]
[q1] [q3] [Φ ]
[q2] [Φ ] [q3]
终止 [q3] [q3] [q3]
[q0,q1] [q0,q1,q3] [q0,q2]
[q0,q2] [q0,q1] [q0,q2,q3]
终止 [q0,q3] [q0,q1,q3] [q0,q2,q3]
[q1,q2] [q3] [q3]
终止 [q1,q3] [q3] [q3]
终止 [q2,q3] [q3] [q3]
[q0,q1,q2] [q0,q1,q3] [q0,q2,q3]
终止? [q0,q1,q3] [q0,q1,q3] [q0,q2,q3]
终止? [q0,q2,q3] [q0,q1,q3] [q0,q2,q3]
终止 [q1,q2,q3] [q3] [q3]
终止 [q0,q1,q2,q3] [q0,q1,q3] [q0,q2,q3]
[Φ ] [Φ ] [Φ ]
2009-7-26 285
3.3.3 NFA与 DFA等价
不可达状态 (inaccessible state),不存在从 [q0]对应的顶点出发,到达该状态对应的顶点的路。我们称此状态从开始状态是不可达的。
表 3-7中,所有标记,?” 的状态是从开始状态可达的,其他是不可达的 ——无用的。
2009-7-26 286
3.3.3 NFA与 DFA等价
构造给定 NFA等价的 DFA策略
– 先只把开始状态 [q0]填入表的状态列中,如果表中所列的状态列有未处理的,则任选一个未处理的状态 [q1,q2,…,qn],对 ∑ 中的每个字符 a,计算 δ ([q1,q2,…,qn],a),并填入相应的表项中,如果 δ ([q1,q2,…,qn],a)在表的状态列未出现过,则将它填入表的状态列。
如此重复下去,直到表的状态列中不存在未处理的状态。
2009-7-26 287
3.3.3 NFA与 DFA等价图 3-11 图 3-9所示 NFA的等价 DFA
2009-7-26 288
3.4 带空移动的有穷状态自动机
接受语言 {0n1m2k|n,m,k≥0}的 NFA
2009-7-26 289
3.4 带空移动的有穷状态自动机
接受语言 {0n1m2k|n,m,k≥0}的 NFA是否可以构造成下图所示的,ε-NFA”?
其构造显然比图 1-13所示的 NFA更容易。
当然还希望它们是等价的。
2009-7-26 290
3.4 带空移动的有穷状态自动机
带空移动的不确定的有穷状态自动机 (non-
deterministic finite automaton with ε-
moves,ε-NFA)
M=(Q,∑,δ,q0,F),Q,∑,q0,F的意义同
DFA。
δ,Q× (∑∪ {ε})?2Q
2009-7-26 291
3.4 带空移动的有穷状态自动机
非空移动
–?(q,a)∈ Q× ∑
–δ(q,a)= {p1,p2,…,pm}
–表示 M在状态 q读入字符 a,可以选择地将状态变成 p1,p2,… 或者 pm,并将读头向右移动一个带方格而指向输入字符串的下一个字符。
2009-7-26 292
3.4 带空移动的有穷状态自动机
空移动
–?q∈ Q
–δ(q,ε)= {p1,p2,…,pm}
–表示 M在状态 q不读入任何字符,可以选择地将状态变成 p1,p2,… 或者 pm。也可以叫做 M在状态 q做一个空移动 (又可以称为 ε移动 ),并且选择地将状态变成 p1、
p2,… 或者 pm。
2009-7-26 293
3.4 带空移动的有穷状态自动机
进一步扩充 δ 的定义域,δ,2Q× ∑ *?2Q。
对任意的 P?Q,w∈∑ * 。
对任意的 q∈ Q,w∈∑ *,a∈∑ 。
⑴ ε -CLOSURE(q)={p|从 q到 p有一条标记为 ε 的路 }。
Pp
pC L O S U R EPC L O S U R E
)()()2(
2009-7-26 294
3.4 带空移动的有穷状态自动机
)(),(?)3( qC L O S U R Eq
),(
),(
)},(),(
|{
)(),(
)4(
wrr
ar
arpwqrpP
PC L O S U R Ewaq
使得
2009-7-26 295
3.4 带空移动的有穷状态自动机
进一步扩展移动函数,2 Q× ∑?2Q 。
对任意 (P,a)∈ 2Q× ∑ 。
Pq
aqaP
),(),()5(
Pq
wqwP
),(?),(?)6(
2009-7-26 296
3.4 带空移动的有穷状态自动机
在 ε -NFA中,对任意 a∈∑,q∈ Q,
),(),(? aqaq
需要严格区分。
2009-7-26 297
图 3-14 所示 ε -NFA
状态
δ
ε 0 1 2 ε 0 1 2
q0 { q1} { q0} Φ Φ {q0,q1
,q2}
{q0,q1
,q2}
{q1,
q2}
{q2}
q1 { q2} Φ { q1} Φ {q1,q2} Φ {q1,
q2}
{q2}
q2 Φ Φ Φ { q2} {q2} Φ Φ {q2}
2009-7-26 298
3.4 带空移动的有穷状态自动机
M接受 (识别 )的语言对于?x∈∑ *,仅当
Fxq?),(? 0?
时,称 x被 M接受。
}),(?|{)( 0* FxqxxML并且
2009-7-26 299
3.4 带空移动的有穷状态自动机定理 3-2ε -NFA与 NFA等价。
证明:设有 ε -NFA M1=(Q,∑,δ 1,q0,
F)
(1) 构造与之等价的 NFA M2 。
取 NFA M2=(Q,∑,δ 2,q0,F2)
F∪ {q0} 如果 F∩ε-CLOSURE(q0)≠Φ
F2=
F 如果 F∩ ε -CLOSURE(q0)=Φ
),(?),( 12 aqaq
2009-7-26 300
3.4 带空移动的有穷状态自动机
(2) 施归纳于 |x|,证明对?x∈∑ + 。
),(?),( 12 xqxq
δ 2(q0,x)= δ 2(q0,wa)
=δ 2(δ 2(q0,w),a)
=δ 2((q0,w),a)
2009-7-26 301
3.4 带空移动的有穷状态自动机
),(
),(
),(),,(
|({
)),((
),(
),(
01
01
101
),(
1
),(
1
),(
2
01
01
01
xq
waq
aqpwqqpC L O S U R E
aqC L O S U R E
aq
aq
wqq
wqq
wqq
2009-7-26 302
3.4 带空移动的有穷状态自动机
(3) 证明,对?x∈∑ +,δ 2(q0,x) ∩ F2≠ Φ
的充分必要条件是
Fxq?),(?1?
⑷ 证明 ε ∈ L(M1)?ε ∈ L(M2) 。
2009-7-26 303
3.4 带空移动的有穷状态自动机
例 3-4 求与图 3-14所示 ε -NFA等价的 NFA。
2009-7-26 304
3.5 FA是正则语言的识别器
3.5.1 FA与右线性文法
DFA M=(Q,∑,δ,q0,F),处理句子
a1a2… an的特性。
⑴ M按照句子 a1a2… an中字符的出现顺序,
从开始状态 q0开始,依次处理字符 a1、
a2,…,an,在这个处理过程中,每处理一的字符进入一个状态,最后停止在某个终止状态。
2009-7-26 305
3.5.1 FA与右线性文法
⑵ 它每次处理且仅处理一个字符:第 i步处理输入字符 ai。
⑶ 对应于使用 δ (q,a)=p的状态转移函数的处理,相当于是在状态 q完成对 a的处理,
然后由 p接下去实现对后续字符的处理 。
⑷ 当 δ (q,a)=p∈ F,且 a是输入串的最后一个字符时,M完成对此输入串的处理。
2009-7-26 306
3.5.1 FA与右线性文法
A0? a1A1 对应产生式 A0?a1A1
a1a2A2 对应产生式 A1?a2A2
…
a1a2… an-1An-1 对应产生式 An-2?an-1An-1
a1a2… an-1an 对应产生式 An-1?an
2009-7-26 307
3.5.1 FA与右线性文法
q0 a1a2… an-1an
├ a1q1 a2… an-1an 对应 δ (q0,a1)=q1
├ a1a2q2… an-1an 对应 δ (q1,a2)=q2
……
├ a1a2… an-1qn-1an 对应 δ (qn-2,an-1)=qn-1
├ a1a2… an-1anqn 对应 δ (qn-1,an)=qn
2009-7-26 308
3.5.1 FA与右线性文法
其中 qn为 M的终止状态。考虑根据 a1、
a2,…,an,让 A0与 q0对应,A1与 q1对应、
A2与 q2对应,…,An-2与 qn-2对应,An-1与 qn-
1对应。这样,就有希望得到满足定理 2-4-1
的正则文法的推导与 DFA的互相模拟的方式。
2009-7-26 309
3.5.1 FA与右线性文法定理 3-3 FA接受的语言是正则语言。
证明:
(1) 构造。
基本思想是让 RG的派生对应 DFA的移动。
设 DFA M=(Q,∑,δ,q0,F),
取右线性文法 G=(Q,∑,P,q0),
P={q?ap|δ(q,a)=p}∪ {q?a|δ(q,a)=p∈ F}
2009-7-26 310
3.5.1 FA与右线性文法
( 2) 证明 L(G)=L(M)-{ε}。
对于 a1a2… an-1an∈ ∑+,
q0?+ a1a2… an-1an
q0? a1q1,q1? a2q2,…,
qn-2? an-1qn-1,qn-1? an∈ P
δ(q0,a1)=q1,δ(q1,a2)=q2,…
,δ(qn-2,an-1)=qn-1,δ(qn-1,an)=qn,且
qn∈ F
δ(q0,a1a2… an-1an)= qn∈ F
a1a2…a n-1an∈ L(M)
2009-7-26 311
3.5.1 FA与右线性文法
( 3) 关于 ε句子。
如果 q0?F,则 ε?L(M),L(G)=L(M)。
如果 q0∈ F,则由定理 2-6和定理 2-7,存在正则文法 G′,使得 L(G′)=L(G)∪ {ε}=L(M)。
综上所述,对于任意 DFA M,存在正则文法
G,使得 L(G)=L(M)。
定理得证。
2009-7-26 312
3.5.1 FA与右线性文法
例 3-9 与图 3-8 所给 DFA等价的正则文法
qs?0|0q0|1q1
q0?0|0q0|1q1
q1?0q2|1|1q0
q2?0q1|1q2
2009-7-26 313
3.5.1 FA与右线性文法
与图 3-7 所给的 DFA等价的正则文法
q0?0q1|1qt|2qt
q1?0q1|1q2|2qt
q2?0qt|1q2|2q3|2
q3?0qt|1qt|2q3|2
qt? 0qt|1qt|2qt
2009-7-26 314
3.5.1 FA与右线性文法定理 3-4正则语言可以由 FA接受。
证明:
( 1)构造。
基本思想:让 FA模拟 RG的派生 。
设 G=(V,T,P,S),且 ε?L(G),
取 FA M=( V∪ {Z},T,δ,S,{Z}),Z?V。
2009-7-26 315
3.5.1 FA与右线性文法
对?(a,A)∈ T× V
{B|A?aB∈ P}∪ {Z} 如果 A?a∈ P
δ(A,a)=
{B|A?aB∈ P} 如果 A?a?P
用 B∈ δ(a,A)与产生式 A?aB对应用 Z∈ δ(a,A)与产生式 A?a对应 。
2009-7-26 316
3.5.1 FA与右线性文法
( 2) 证明 L(M)=L(G)
对于 a1a2… an-1an∈ T+,
a1a2… an-1an∈ L(G)? S?+ a1a2… an-1an
S?a1A1? a1a2A2?…
a1a2… an-1An-1? a1a2… an-1an
S?a1A1,A1?a2A2,…,
An-2?an-1An-1,An-1?an∈ P
2009-7-26 317
3.5.1 FA与右线性文法
A1∈ δ(S,a1),A2∈ δ(A1,a2),…,
An-1∈ δ(An-2,an-1),Z∈ δ(An-1,an)
Z∈ δ(S,a1a2… an-1an )
a1a2… an-1an∈ L(M)
对于 ε,按照定理 2-5和定理 2-6处理。
2009-7-26 318
3.5.1 FA与右线性文法
例 3-10 构造与所给正则文法等价的 FA:
G1,E?0A|1B
A?1|1C
B?0|0C
C?0B|1A
2009-7-26 319
3.5.1 FA与右线性文法
δ (E,0)={A} 对应 E?0A
δ (E,1)={B} 对应 E?1B
δ (A,1)={Z,C} 对应 A?1|1C
δ (B,0)={Z,C} 对应 B?0|0C
δ (C,0)={B} 对应 C?0B
δ (C,1)={A} 对应 C?1A
2009-7-26 320
3.5.1 FA与右线性文法
2009-7-26 321
3.5.1 FA与右线性文法推论 3-1 FA与正则文法等价。
证明:根据定理 3-3和定理 3-4即可得到。
2009-7-26 322
3.5.1 FA与左线性文法
按照推导来说,句子 a1a2… an-1an中的字符被推导出的先后顺序正好与它们在句子中出现的顺序相反;而按照归约来看,它们被归约成语法变量的顺序则正好与它们在句子中出现的顺序相同,a1,a2,…,an-1,
an。可见,归约过程与 FA处理句子字符的顺序是一致的,所以可考虑依照,归约,
来研究 FA的构造。
2009-7-26 323
3.5.1 FA与左线性文法
对于形如 A?a的产生式:在推导中,一旦使用了这样的产生式,句型就变成了句子,
而且 a是该句子的第一个字符;按,归约,
理解,对句子的第 1个字符,根据形如 A?a
的产生式进行归约。对应到 FA中,FA从开始状态出发,读到句子的第一个字符 a,应将它,归约,为 A。我们如果考虑用语法变量对应 FA的状态,那么,此时我们需要引入一个开始状态,比如说,Z。这样,对应形如 A?a的产生式,可以定义 A∈ δ (Z,a)。
2009-7-26 324
3.5.1 FA与左线性文法
按照上面的分析,对应于形如 A?Ba的产生式,FA应该在状态 B读入 a时,将状态转换到 A。也可以理解为:在状态 B,FA已经将当前句子的、处理过的前缀,归约,成了 B,
在此时它读入 a时,要将 Ba归约成 A,因此,
它进入状态 A。
2009-7-26 325
3.5.1 FA与左线性文法
按照,归约,的说法,如果一个句子是文法 G产生的语言的合法句子,它最终应该被归约成文法 G的开始符号。所以,G的开始符号对应的状态就是相应的 FA的终止状态。
如何解决好开始符号只有一个,而 DFA的终止状态可以有多个的问题。
2009-7-26 326
3.5.1 FA与左线性文法
例如:对文法
G2,E?A0|B1
A?1|C1
B?0|C0
C?B0|A1
对应
δ(A,0)={E}
δ(B,1)={E}
δ(Z,1)={A} δ(C,
1)={A}
δ(Z,0)={B}
δ(C,0)={B}
δ(B,0)={C}
δ (A,1)={C}
2009-7-26 327
3.5.1 FA与左线性文法
G2,E?A0|B1
A?1|C1
B?0|C0
C?B0|A1
2009-7-26 328
3.5.1 FA与左线性文法
DFA (的状态转移图 )作如下,预处理,,
⑴ 删除 DFA的陷阱状态 (包括与之相关的弧 );
⑵ 在图中加一个识别状态;
⑶,复制,一条原来到达终止状态的弧,
使它从原来的起点出发,到达新添加的识别状态 。
2009-7-26 329
3.5.1 FA与左线性文法
⑴ 如果 δ (A,a)=B,则有产生式 B?Aa;
⑵ 如果 δ (A,a)=B,且 A是开始状态,则有产生式 B?a。
定理 3-5 左线性文法与 FA等价。
2009-7-26 330
3.6 FA的一些变形
3.6.1 双向有穷状态自动机
确定的双向有穷状态自动机 (two-way
deterministic finite automaton,2DFA)
M=(Q,∑,δ,q0,F)
Q,∑,q0,F的意义同 DFA。
2009-7-26 331
3.6.1 双向有穷状态自动机
δ,Q× ∑?Q× {L,R,S},对?(q,a)∈ Q× ∑
– 如果 δ (q,a)= {p,L},它表示 M在状态 q读入字符 a,将状态变成 p,并将读头向左移动一个带方格而指向输入字符串的前一个字符。
– 如果 δ (q,a)= {p,R},它表示 M在状态 q读入字符 a,将状态变成 p,并将读头向右移动一个带方格而指向输入字符串中下一个字符。
– 如果 δ (q,a)= {p,S},它表示 M在状态 q读入字符 a,将状态变成 p,读头保持在原位不动。
2009-7-26 332
3.6.1 双向有穷状态自动机
M接受的语言
L(M)={x| q0x├ *xp且 p∈ F} 是 2DFA接受的语言。
定理 3-6 2DFA与 FA等价。
2009-7-26 333
3.6.1 双向有穷状态自动机
不确定的双向有穷状态自动机 (two-way
nondeterministic finite automaton,
2NFA)
M=(Q,∑,δ,q0,F)
Q,∑,q0,F的意义同 DFA。
δ,Q× ∑?2Q× {L,R,S} 。
2009-7-26 334
3.6.1 双向有穷状态自动机
δ (q,a)= {( p1,D1)( p2,D2) …,(pm,Dm) }
表示 M在状态 q读入字符 a,可以选择地将状态变成 p1同时按 D1实现对读头的移动、
或者将状态变成 p2同时按 D2实现对读头的移动,…… 或者将状态变成 pm同时按 Dm实现对读头的移动。其中 D1,D2,…,
Dm∈ {L,R,S},表示的意义与 2DFA的定义表示的意义相同 。
2009-7-26 335
3.6.1 双向有穷状态自动机定理 3-7 2NFA与 FA等价。
2009-7-26 336
3.6.2 带输出的 FA
Moore机
M=(Q,∑,Δ,δ,λ,q0)
Q,∑,q0,δ 的意义同 DFA。
Δ ——输出字母表 (output alphabet)。
λ,Q?Δ 为输出函数。对?q∈ Q,λ (q)=a
表示 M在状态 q时输出 a。
2009-7-26 337
3.6.2 带输出的 FA
对于?a1a2… an-1an∈∑ *,如果
δ (q0,a1)=q1,δ (q1,a2)=q2,…,δ (qn-2,
an-1)=qn-1,δ (qn-1,an)=qn,
则 M的输出为
λ (q0,a1)λ (q1,a2)… λ (qn-1,an)
2009-7-26 338
3.6.2 带输出的 FA
Mealy机
M=(Q,∑,Δ,δ,λ,q0)
Δ ——输出字母表。
λ,Q× ∑?Δ 为输出函数。对?(q,
a)∈ Q× ∑,λ (q,a)=d表示 M在状态 q读入字符 a时输出 d。
2009-7-26 339
3.6.2 带输出的 FA
对于?a1a2… an-1an∈∑ *,M的输出串为:
λ (q0,a1)λ (δ (q0,a1),a2) … λ ((… δ (δ (q0,
a1),a2)… ),an)
设 δ (q0,a1)=q1,δ (q1,a2)=q2,…,δ (qn-2,
an-1)=qn-1,δ (qn-1,an)=qn,
则 M的输出可以表示成:
λ (q0,a1)λ (q1,a2) … λ (qn-1,an)
2009-7-26 340
3.6.2 带输出的 FA
Moore机处理该串时每经过一个状态,就输出一个字符:输出字符和状态一一对应;
Mealy机处理该串时的每一个移动输出一个字符:输出字符和移动一一对应。
2009-7-26 341
3.6.2 带输出的 FA
如果对于?x∈∑ *,T1(x)=λ 1(q0)T2(x),则
Moore机 M1=(Q1,∑,Δ,δ 1,λ 1,q01)
与 Mealy机 M2=(Q2,∑,Δ,δ 2,λ 2,
q02),是等价的,其中,T1(x)和 T2(x)分别表示 M1和 M2关于 x的输出 。
定理 3-8 Moore机与 Mealy机等价 。
2009-7-26 342
3.7 小结本章讨论正则语言的识别器 ——FA。
包括 DFA,NFA,ε -NFA。 RG与 FA的等价性。简单介绍带输出的 FA和双向 FA。
⑴ FA M是一个五元组,M=(Q,∑,δ,
q0,F),它可以用状态转移图表示 。
⑵ M接受的语言为 {x| x∈∑ *且 δ (q,
x)∈ F}。 如果 L(M1)=L(M2),则称 M1与 M2
等价 。
⑶ FA的状态具有有穷的存储功能 。 这一特性可以用来构造接受一个给定语言的 FA。
2009-7-26 343
3.7 小结
⑷ NFA允许 M在一个状态下读入一个字符时选择地进入某一个状态,对于?x∈∑ *,
如果 δ (q0,x) ∩ F≠ Φ,则称 x被 M接受,
如果 δ (q0,x)∩ F=Φ,则称 M不接受 x。 M
接受的语言 L(M)={x| x∈∑ *且 δ (q0,x) ∩
F≠ Φ }。
2009-7-26 344
3.7 小结
⑸ ε -NFA是在 NFA的基础上,允许直接根据当前状态变换到新的状态而不考虑输入带上的符号 。 对?q∈ Q,δ (q,ε )= {p1,p2,…,
pm}表示 M在状态 q不读入任何字符,可以选择地将状态变成 p1,p2,… 或者 pm。 这叫做 M
在状态 q做一个空移动 。
⑹ NFA与 DFA等价,ε -NFA与 NFA等价,统称它们为 FA。
2009-7-26 345
3.7 小结
⑺ 根据需要,可以在 FA中设置一种特殊的状态 ——陷阱状态 。 但是,不可达状态却是应该无条件地删除的 。
⑻ FA是正则语言的识别模型 。 分别按照对推导和归约的模拟,可以证明 FA和左线性文法,右线性文法等价 。
2009-7-26 346
3.7 小结
⑼ 2DFA是 FA的又一种变形,它不仅允许读头向前移动,还允许读头向后移动 。 通过这种扩充,2DFA仍然与 FA等价 。
⑽ Moore机和 Mealy机是两种等价的带输出的 FA,Moore机根据状态决定输出字符,
Mealy机根据移动决定输出字符 。
2009-7-26 347
第 4章 正则表达式
正则文法擅长语言的产生,有穷状态自动机擅长语言的识别。
本章讨论正则语言的正则表达式描述。它在对正则语言的表达上具有特殊的优势,
为正则语言的计算机处理提供了方便条件。
– 简洁、更接近语言的集合表示和语言的计算机表示等。
2009-7-26 348
第 4章 正则表达式
主要内容
– 典型 RE的构造。
– 与 RE等价 FA的构造方法。
– 与 DFA等价的 RE的构造。
重点
– RE的概念。
– RE与 DFA的等价性。
难点,RE与 DFA的等价性证明。
2009-7-26 349
4.1 启示产生语言 {anbmck|n,m,k? 1}∪
{aicnbxam|i? 0,n? 1,m? 2,x为 d和 e组成的串 }
的正则文法为
A?aA|aB|cE
B?bB|bC
C?cC|c
E?cE|bF
F?dF|eF|aH
H?aH|a
2009-7-26 350
4.1 启示
接受此语言的 NFA M
2009-7-26 351
4.1 启示
计算集合 set(q)
set(A)={an|n? 0}={a}*
set(B)= set(A){a}{bn|n? 0}
={anabm|m,n? 0}
={a}*{a}{b}*={a}+{b}*
set(C)= set(B){b}{c}*
={a}*{a}{b}*{b}{c}*={a}+{b}+{c}*
set(D)= set(C) {c}={a}+{b}+{c}*{c}
={a}+{b}+{c}+
2009-7-26 352
4.1 启示
set(E)= set(A){c}{c}*
={a}*{c}{c}*={a}*{c}+
set(F)= set(E){b}{d,e}*={a}*{c}+{b}{d,e}*
set(H)= set(F){a}{a}*={a}*{c}+{d,e}*{a}{a}*
={a}*{c}+{d,e}*{a}+
set(I)= set(H){a}={a}*{c}+{d,e}*{a}+{a}
L(M)= set(D)∪ set(H)
= {a}+{b}+{c}+∪ {a}*{c}+{d,e}*{a}+{a}
2009-7-26 353
4.1 启示根据集合运算的定义,
{d,e}={d}∪ {e}。
从而,
{d,e}*=({d}∪ {e})*。
这样可以将 L(M)写成如下形式:
L(M)= {a}+{b}+{c}+∪ {a}*{c}+({d}∪ {e})*{a}+{a}
记作:
a+b+c++a*c+(d+e)*a+a= aa*bb*cc*+a*cc*(d+e)* aaa*
2009-7-26 354
4.2 RE的形式定义
正则表达式 (regular expression,RE)
⑴ Φ是 ∑上的 RE,它表示语言 Φ;
⑵ ε是 ∑上的 RE,它表示语言 {ε};
⑶ 对于?a∈ ∑,a是 ∑上的 RE,它表示语言
{a};
2009-7-26 355
4.2 RE的形式定义
⑷ 如果 r和 s分别是 ∑上表示语言 R和 S的 RE,则:
r与 s的,和,(r+s)是 ∑上的 RE,(r+s)表达的语言为 R∪ S;
r与 s的,乘积,(rs)是 ∑上的 RE,(rs)表达的语言为 RS;
r的克林闭包 (r*)是 ∑上的 RE,(r*)表达的语言为 R*。
⑸ 只有满足 ⑴,⑵,⑶,⑷ 的才是 ∑上的 RE。
2009-7-26 356
4.2 RE的形式定义
例 4-1 设 ∑={0,1}
⑴ 0,表示语言 {0};
⑵ 1,表示语言 {1};
⑶ (0+1),表示语言 {0,1};
⑷ (01),表示语言 {01};
⑸ ((0+1)*),表示语言 {0,1}*;
⑹ ((00)((00)*)),表示语言 {00}{00}*;
2009-7-26 357
4.2 RE的形式定义
⑺ ((((0+1)*)(0+1))((0+1)*)),表示语言 {0,1}+;
⑻ ((((0+1)*)000)((0+1)*)),表示 {0,1}上的至少含有 3个连续 0的串组成的语言;
⑼ ((((0+1)*)0)1),表示所有以 01结尾的 0,1
字符串组成的语言;
⑽ (1(((0+1)*)0)),表示所有以 1开头,并且以
0结尾的 0,1字符串组成的语言 。
2009-7-26 358
4.2 RE的形式定义
约定
⑴ r的正闭包 r+表示 r与 (r*)的乘积以及 (r*)与 r
的乘积:
r+=(r(r*))=((r*)r)
⑵ 闭包运算的优先级最高,乘运算的优先级次之,加运算,+”的优先级最低。所以,
在意义明确时,可以省略其中某些括号。
((((0+1)*)000)((0+1)*))=(0+1)*000(0+1)*
2009-7-26 359
4.2 RE的形式定义
((((0+1)*)(0+1))((0+1)*))=(0+1)*(0+1)(0+1)*
⑶ 在意义明确时,RE r表示的语言记为 L(r),
也可以直接地记为 r。
⑷ 加,乘,闭包运算均执行左结合规则 。
2009-7-26 360
4.2 RE的形式定义
相等 (equivalence)
– r,s是字母表 ∑上的一个 RE,如果 L(r)=L(s),
则称 r与 s相等,记作 r=s 。
– 相等也称为 等价。
几个基本结论
⑴ 结合律,(rs)t=r(st)
(r+s)+t=r+(s+t)
⑵ 分配律,r(s+t)=rs+rt
(s+t)r=sr+tr
2009-7-26 361
4.2 RE的形式定义
⑶ 交换律,r+s=s+r。
⑷ 幂等律,r+r=r。
⑸ 加法运算零元素,r+Φ=r。
⑹ 乘法运算单位元,rε=εr=r。
⑺ 乘法运算零元素,rΦ=Φr=Φ。
⑻ L(Φ)=Φ。
⑼ L(ε)={ε}。
⑽ L(a)={a}。
2009-7-26 362
4.2 RE的形式定义
⑾ L(rs)=L(r)L(s)。
⑿ L(r+s)=L(r)∪ L(s)。
⒀ L(r*)=(L(r))* 。
⒁ L(Φ*)={ε}。
⒂ L((r+ε)*)=L(r*)。
⒃ L((r*)*)=L(r*)。
⒄ L((r*s*)*)=L((r+s)*)。
⒅ 如果 L(r)?L(s),则 r+s=s。
2009-7-26 363
4.2 RE的形式定义
⒆ L(rn)=(L(r))n 。
⒇ rnrm=rn+m 。
一般地,r+ε ≠ r,(rs)n ≠ rnsn,rs≠ sr。
幂
r是字母表 ∑ 上的 RE,r的 n次 幂 定义为
⑴ r0=ε。
⑵ rn=rn-1r。
2009-7-26 364
4.2 RE的形式定义
例 4-2 设 ∑ ={0,1}
00表示语言 {00};
(0+1)*00(0+1)*表示所有的至少含两个连续
0的 0,1串组成的语言;
(0+1)*1(0+1)9表示所有的倒数第 10个字符为 1的串组成的语言;
2009-7-26 365
4.2 RE的形式定义
L((0+1)*011)={x|x是以 011结尾的 0,1串 };
L(0+1+2+)={0n1m2k|m,n,k≥1};
L(0*1*2*)={0n1m2k|m,n,k≥0};
L(1(0+1)*1+0(0+1)*0))={x|x的开头字符与尾字符相同 }。
2009-7-26 366
4.3 RE与 FA等价
正则表达式 r称为与 FA M等价,如果
L(r)=L(M)。
从开始状态出发,根据状态之间按照转移所确定的后继关系,依次计算出所给 FA的各个状态 q对应的 set(q),并且最终得到相应的 FA接受的语言的 RE表示。
寻找一种比较“机械”的方法,使得计算机系统能够自动完成 FA与 RE之间的转换。
2009-7-26 367
4.3.1 RE到 FA的等价变换
0对应的 FA
01对应的 FA
2009-7-26 368
4.3.1 RE到 FA的等价变换
0+1对应的 FA
2009-7-26 369
4.3.1 RE到 FA的等价变换
0*对应的 FA
2009-7-26 370
4.3.1 RE到 FA的等价变换定理 4-1 RE表示的语言是 RL。
证明:
施归纳于正则表达式中所含的运算符的个数 n,证明对于字母表 ∑上的任意正则表达式 r,存在 FA M,使得 L(M) = L(r) 。
– M恰有一个终止状态。
– M在终止状态下不作任何移动。
2009-7-26 371
4.3.1 RE到 FA的等价变换
n=0
r=ε r=Φ r=a
2009-7-26 372
4.3.1 RE到 FA的等价变换设结论对于 n=k时成立,此时有如下 FA:
M1=(Q1,∑,δ1,q01,{f1})
M2=(Q2,∑,δ2,q02,{f2})
L(M1)=L(r1),L(M2)=L(r2)。
Q1∩Q2=Φ。
n=k
2009-7-26 373
4.3.1 RE到 FA的等价变换
n=k+1
r=r1+r2
取 q0,f?Q1∪ Q2,令
M=(Q1∪ Q2∪ {q0,f},∑,δ,q0,{f})
① δ(q0,ε)={q01,q02};
② 对?q∈ Q1,a∈ ∑∪ {ε},δ(q,a)=δ1(q,a);
对?q∈ Q2,a∈ ∑∪ {ε},δ(q,a)=δ2(q,a);
③ δ(f1,ε)={f};
④ δ(f2,ε)={f}。
2009-7-26 374
4.3.1 RE到 FA的等价变换
n=k+1
r=r1+r2
2009-7-26 375
4.3.1 RE到 FA的等价变换
M=(Q1∪ Q2,∑,δ,q01,{f2})
① 对?q∈ Q1-{f1},a∈∑∪ {ε }
– δ (q,a)=δ 1(q,a);
② 对?q∈ Q2-{f2},a∈∑∪ {ε }
– δ (q,a)=δ 2(q,a);
③ δ (f1,ε )={q02}
2009-7-26 376
4.3.1 RE到 FA的等价变换
r=r1r2
2009-7-26 377
4.3.1 RE到 FA的等价变换
M=(Q1∪ {q0,f},∑,δ,q0,{f})
其中 q0,f?Q1,定义 δ 为
① 对?q∈ Q1-{f1},a∈∑,
δ (q,a)=δ 1(q,a)。
② δ (f1,ε )={q01,f}。
③ δ (q0,ε )={q01,f}。
2009-7-26 378
4.3.1 RE到 FA的等价变换
r=r1*
2009-7-26 379
4.3.1 RE到 FA的等价变换
按照定理 4-1证明给出的方法构造一个给定
RE的等价 FA时,该 FA有可能含有许多的空移动。
可以按照自己对给定 RE的,理解,以及对
FA的,理解,,直接地,构造出一个比较,简单,的 FA。
定理证明中所给的方法是机械的。由于
,直接地,构造出的 FA的正确性依赖于构造者的,理解,,所以它的正确性缺乏有力的保证。
2009-7-26 380
4.3.1 RE到 FA的等价变换
例 4-3 构造与 (0+1)*0+(00)*等价的 FA。
2009-7-26 381
4.3.1 RE到 FA的等价变换
按照对 (0+1)*0+(00)*的,理解,,直接地,
构造出的 FA。
2009-7-26 382
4.3.2 RL可以用 RE表示
计算 DFA的每个状态对应的集合 ——字母表的克林闭包的等价分类,是具有启发意义的。
这个计算过程难以,机械,地进行。
计算 q1到 q2的一类串的集合,Rkij 。
图上作业法。
2009-7-26 383
4.3.2 RL可以用 RE表示定理 4-2 RL可以用 RE表示。
设 DFA
M=({q1,q2,…,qn},∑,δ,q1,F)
Rkij={x|δ (qi,x)=qj而且对于 x的任意前缀
y(y≠ x,y≠ ε ),如果 δ (qi,y)=ql,则 l? k}。
2009-7-26 384
4.3.2 RL可以用 RE表示
R0ij=
{a|δ (qi,a)=qj} 如果 i≠ j
{a|δ (qi,a)=qj}∪ {ε } 如果 i=j
Rkij= Rk-1ik( Rk-1kk)* Rk-1kj Rk-1ij
Fq
n
f
f
RML
1)(
2009-7-26 385
4.3.2 RL可以用 RE表示
图上作业法启示
2009-7-26 386
4.3.2 RL可以用 RE表示
图上作业法操作步骤
⑴ 预处理:
① 用标记为 X和 Y的状态将 M“括起来,,
在状态转移图中增加标记为 X和 Y的状态,
从标记为 X的状态到标记为 q0的状态引一条标记为 ε 的弧;从标记为 q(q∈ F)的状态到标记为 Y的状态分别引一条标记为 ε 的弧 。
② 去掉所有的不可达状态 。
2009-7-26 387
4.3.2 RL可以用 RE表示
⑵ 对通过步骤 (1)处理所得到的状态转移图重复如下操作,直到该图中不再包含除了标记为 X和 Y外的其他状态,并且这两个状态之间最多只有一条弧。
并弧
– 将从 q到 p的标记为 r1,r2,…,rg并行弧用从 q
到 p的、标记为 r1+r2+… +rg的弧取代这 g个并行弧。
2009-7-26 388
4.3.2 RL可以用 RE表示
去状态 1
– 如果从 q到 p有一条标记为 r1的弧,从 p到 t有一条标记为 r2的弧,不存在从状态 p到状态 p的弧,
将状态 p和与之关联的这两条弧去掉,用一条从 q到 t的标记为 r1r2的弧代替。
去状态 2
– 如果从 q到 p有一条标记为 r1的弧,从 p到 t有一条标记为 r2的弧,从状态 p到状态 p标记为 r3的弧,将状态 p和与之关联的这三条弧去掉,用一条从 q到 t的标记为 r1r3*r2的弧代替。
2009-7-26 389
4.3.2 RL可以用 RE表示
去状态 3
– 如果图中只有三个状态,而且不存在从标记为
X的状态到达标记为 Y的状态的路,则将除标记为 X的状态和标记为 Y的状态之外的第 3个状态及其相关的弧全部删除。
2009-7-26 390
4.3.2 RL可以用 RE表示
⑶ 从标记为 X的状态到标记为 Y的状态的弧的标记为所求的正则表达式。如果此弧不存在,则所求的正则表达式为 Φ。
2009-7-26 391
4.3.2 RL可以用 RE表示
例 4-4 求图 4-14所示的 DFA等价的 RE。
2009-7-26 392
4.3.2 RL可以用 RE表示
预处理。
2009-7-26 393
4.3.2 RL可以用 RE表示
去掉状态 q3。
2009-7-26 394
4.3.2 RL可以用 RE表示
去掉状态 q4。
2009-7-26 395
4.3.2 RL可以用 RE表示
合并从标记为 q2的状态到标记为 Y的状态的两条并行弧。
2009-7-26 396
4.3.2 RL可以用 RE表示
去掉状态 q0。
2009-7-26 397
4.3.2 RL可以用 RE表示
并弧。
2009-7-26 398
4.3.2 RL可以用 RE表示
去掉状态 q1。
2009-7-26 399
4.3.2 RL可以用 RE表示
去掉状态 q2。
1*0(11*0)*0((00*111*0+00*10+11*0)(11*0)*0)(00*+00*1)
就是所求。
2009-7-26 400
4.3.2 RL可以用 RE表示
几点值得注意 的问题
⑴ 如果去状态的顺序不一样,则得到的 RE可能在形式是不一样,但它们都是等价的。
⑵ 当 DFA的终止状态都是不可达的时候,状态转移图中必不存在从开始状态到终止状态的路。
此时,相应的 RE为 Φ。
⑶ 不计算自身到自身的弧,如果状态 q的入度为
n,出度为 m,则将状态 q及其相关的弧去掉之后,需要添加 n*m条新弧。
2009-7-26 401
4.3.2 RL可以用 RE表示
⑷ 对操作的步数施归纳,可以证明它的正确性。
推论 4-1 正则表达式与 FA、正则文法等价,是正则语言的表示模型。
2009-7-26 402
4.4 正则语言等价模型的总结
A?aB ~ B∈ δ(A
,a)
A?a ~ qf∈ δ(A,
a)
δ(q,a)=p~
q?ap
δ(q,a)=p∈ F~
q?a
RGG
DF
A
NF
A
RE
ε-NFA
δDFA(P,a)=[δNFA(P,
a)]
δNFA(q,a)
=(q,a)
图上作业法归纳
2009-7-26 403
4.5 小结本章讨论了 RL及其与 FA的等价性。
⑴ 字母表 ∑ 上的 RE用来表示 ∑ 上的 RL。 Φ、
ε,a( a∈∑ ),是 ∑ 上的最基本的 RE,它们分别表示语言 Φ,{ε },{a},以此为基础,
如果 r和 s分别是 ∑ 上的表示语言 R和 S的 RE,
则 r+s,rs,r*分别是 ∑ 上的表示语言 R∪S,
RS,R*的 RE。如果 L(r)=L(s),则称 r与 s等价。
2009-7-26 404
4.5 小结
⑵ RE对乘,加满足结合律;乘对加满足左,
右分配律;加满足交换率和幂等率; Φ是加运算的零元素; ε 是乘运算的单位元;
Φ是乘运算的零元素 。
⑶ RE是 RL的一种描述。容易根据 RE构造出与它等价的 FA。反过来,可以用图上作业法构造出与给定的 DFA等价的 RE。
⑷ RL的 5种等价描述模型转换图。
2009-7-26 405
第 5章 RL的性质
RL性质
– 泵引理及其应用
– 并、乘积、闭包、补、交
– 正则代换、同态、逆同态的封闭性
从 RL固有特征寻求表示的一致性
– Myhill-Nerode定理
– FA的极小化
RL的几个判定问题
– 空否、有穷否、两个 DFA等价否、成员关系
2009-7-26 406
5.1 RL的泵引理
泵引理 (pumping lemma)
设 L为一个 RL,则存在仅依赖于 L的正整数 N,对于?z∈ L,如果 |z|≥N,则存在 u,v、
w,满足
⑴ z=uvw;
⑵ |uv|≤N;
⑶ |v|≥1;
⑷ 对于任意的整数 i≥0,uviw∈ L;
⑸ N不大于接受 L的最小 DFA M的状态数 。
2009-7-26 407
5.1 RL的泵引理
证明思想
2009-7-26 408
5.1 RL的泵引理证明:
DFA在处理一个足够长的句子的过程中,必定会重复地经过某一个状态 。 换句话说,在
DFA的状态转移图中,必定存在一条含有回路的从启动状态到某个终止状态的路 。 由于是回路,所以,DFA可以根据实际需要沿着这个回路循环运行,相当于这个回路中弧上的标记构成的非空子串可以重复任意多次 。
2009-7-26 409
5.1 RL的泵引理
M=(Q,∑,δ,q0,F)
|Q|=N
z= a1a2… am m≥N
δ(q0,a1a2… ah)=qh
状态序列 q0,q1,…,qN中,至少有两个状态是相同,qk=qj
2009-7-26 410
5.1 RL的泵引理
δ(q0,a1a2… ak)=qk
δ(qk,ak+1… aj)=qj=qk
δ(qj,aj+1… am)=qm
对于任意的整数 i≥0
δ(qk,(ak+1… aj)i)
=δ(qk,(ak+1… aj)i-1)
…
=δ(qk,ak+1… aj)=qk
2009-7-26 411
5.1 RL的泵引理故,
δ(q0,a1a2… ak(ak+1… aj)i aj+1… am)=qm
也就是说,
a1a2… ak(ak+1… aj)i aj+1… am∈ L(M)
u= a1a2… ak,
v=ak+1… aj,
w= aj+1… am
uviw∈ L
2009-7-26 412
5.1 RL的泵引理
例 5-1 证明 {0n1n|n≥1}不是 RL。
证明:
假设 L={0n1n|n≥1}是 RL
z=0N1N
按照泵引理所述
v=0k k≥1
此时有,
u=0N-k-j
w=0j1N
2009-7-26 413
5.1 RL的泵引理从而有,
uviw=0N-k-j(0k)i0j1N=0N+(i-1)k1N
当 i=2时,我们有:
uv2w=0N+(2-1)k1N = 0N+k1N
注意到 k≥1,所以,
N+k>N。
这就是说,
0N+k1N?L
这与泵引理矛盾 。 所以,L不是 RL。
2009-7-26 414
5.1 RL的泵引理
例 5-2 证明 {0n|n为素数 }不是 RL。
证明:假设 L={0n|n为素数 }是 RL。
取 z=0N+p ∈ L,
不妨设 v=0k,k≥1
从而有,
uviw=0N+p-k-j(0k)i0j
=0N+p+(i-1)k
2009-7-26 415
5.1 RL的泵引理当 i=N+p+1时,
N+p+(i-1)k=N+p+(N+p+1-1)k
= N+p+(N+p)k
= (N+p)(1+k)
注意到 k≥1,所以
N+p+(N+p+1-1)k=(N+p)(1+k)
不是素数 。 故当 i=N+p+1时,
uvN+p+1w=0(N+p)(1+k)?L
这与泵引理矛盾 。 所以,L不是 RL。
2009-7-26 416
5.1 RL的泵引理
例 5-3 证明 {0n1m2n+m|m,n≥1}不是 RL。
证明:假设 L={0n1m2n+m|m,n≥1} 是 RL。
取 z=0N1N22N
设 v=0k k≥1
从而有,
uviw=0N-k-j(0k)i0j1N22N
=0N+(i-1)k1N22N
2009-7-26 417
5.1 RL的泵引理
uv0w=0N+(0-1)k1N22N
= 0N-k1N22N
注意到 k≥1,
N-k+N=2N-k<2N
0N-k1N22N?L
这个结论与泵引理矛盾。所以,L不是 RL。
2009-7-26 418
5.1 RL的泵引理
用来证明一个语言不是 RL
不能用泵引理去证明一个语言是 RL。
⑴ 由于泵引理给出的是 RL 的必要条件,所以,
在用它证明一个语言不是 RL 时,我们使用反证法。
⑵ 泵引理说的是对 RL 都成立的条件,而我们是要用它证明给定语言不是 RL,这就是说,相应语言的“仅仅依赖于 L的正整数 N”实际上是不存在的。
所以,我们一定是无法给出一个具体的数的。因此,
人们往往就用符号 N来表示这个“假定存在”、而实际并不存在的数。
2009-7-26 419
5.1 RL的泵引理
⑶ 由于泵引理指出,如果 L是 RL,则对任意的 z∈ L,只要 |z|≥N,一定会存在 u,v、
w,使 uviw∈ L对所有的 i成立。因此,我们在选择 z时,就需要注意到论证时的简洁和方便。
⑷ 当一个特意被选来用作“发现矛盾”的 z
确定以后,就必须依照 |uv|≤N和 |v|≥1的要求,
说明 v不存在 (对“存在 u,v,w”的否定 )。
2009-7-26 420
5.1 RL的泵引理
⑸ 与选 z时类似,在寻找 i时,我们也仅需要找到一个表明矛盾的,具体,值就可以了
(对,所有 i”的否定 )。
⑹ 一般地,在证明一个语言不是 RL 的时候,
我们并不使用泵引理的第 (5)条 。
⑺ 事实上,引理所要求的 |uv|≤N并不是必须的 。 这个限制为我们简化相应的证明提供了良好支撑 ——扩充了的泵引理 。
2009-7-26 421
5.2 RL的封闭性
封闭性 (closure property)
如果任意的、属于同一语言类的语言在某一特定运算下所得的结果仍然是该类语言,则称该语言类对此运算是 封闭 的
有效封闭性 (valid closure property)
给定一个语言类的若干个语言的描述,如果存在一个算法,它可以构造出这些语言在给定运算下所获得的运算结果的相应形式的语言描述,则称此语言类对相应的运算是 有效封闭 的。
2009-7-26 422
5.2 RL的封闭性定理 5-1 RL 在并、乘积、闭包运算下是封闭 的。
根据 RE的定义,立即可以得到此定理。
2009-7-26 423
5.2 RL的封闭性定理 5-2 RL 在补运算下是封闭的。
证明,
M=(Q,∑,δ,q0,F) L(M)=L,
取 DFA M′= (Q,∑,δ,q0,Q-F)
显然,对于任意的 x∈ ∑*,
δ(q0,x)=f∈ F? δ(q0,x)=f?Q-F
即,x∈ L(M)? x?L(M′),
L(M′)= ∑*-L(M)。
所以,RL 在补运算下是封闭的。定理得到证明。
2009-7-26 424
5.2 RL的封闭性定理 5-3 RL 在交运算下封闭。
证明 思路
2009-7-26 425
5.2 RL的封闭性
正则代换 (regular substitution)
设 ∑,Δ是两个字母表,映射
*2,f
被称为是从 ∑ 到 Δ 的 代换 。如果对于?a∈∑,
f(a)是 Δ 上的 RL,则称 f为 正则代换。
2009-7-26 426
5.2 RL的封闭性
先将 f的定义域扩展到 ∑ *上:
*2,*f
⑴ f(ε )={ε };
⑵ f(xa)=f(x)f(a)。
2009-7-26 427
5.2 RL的封闭性
再将 f的定义域扩展到 *
2?
** 22,f
对于?L?∑ *
Lx
xfLf
)()(
2009-7-26 428
5.2 RL的封闭性
例 5-4 设 ∑ ={0,1},Δ ={a,b},f(0)=a,f(1)=b*,
则
f(010)=f(0)f(1)f(0)=ab*a
f({11,00})=f(11)∪ f(00)
=f(1)f(1)∪ f(0)f(0)=b*b*+aa=b*+aa
f(L(0*(0+1)1*))=L(a*(a+b*)(b*)*)
=L(a*(a+b*)b*)=L(a*ab*+a*b*b*)
=L(a*b*)
2009-7-26 429
5.2 RL的封闭性
f是正则代换,则
⑴ f(Φ )=Φ;
⑵ f(ε )=ε ;
⑶ 对于?a∈∑,f(a)是 Δ 上的 RE;
⑷ 如果 r,s是 ∑ 上的 RE,则
f(r+s)=f(r)+f(s)
f(rs)=f(r)f(s)
f(r*)=f(r)*
是 Δ 上的 RE。
2009-7-26 430
5.2 RL的封闭性定理 5-4 设 L是 ∑ 上的一个 RL
*2,f
是正则代换,则 f(L)也是 RL。
证明:
描述工具,RE。
对 r中运算符的个数 n施以归纳,证明 f(r)
是表示 f(L)的 RE。
2009-7-26 431
5.2 RL的封闭性
当 n=0时,结论成立。
当 n? k时定理成立,即当 r中运算符的个数不大于 k时,f(L(r)) = L(f?。
当 n=k+1时,
2009-7-26 432
5.2 RL的封闭性
⑴ r=r1+r2。
f(L)=f(L(r))
=f(L(r1+r2))
=f(L(r1)∪ L(r2)) RE的定义
=f(L(r1))∪ f(L(r2)) 正则代换的定义
=L(f(r1))∪ L (f (r2)) 归纳假设
=L(f(r1)+f (r2)) RE的定义
=L(f(r1+r2)) RE的正则代换的定义
=L(f(r))
2009-7-26 433
5.2 RL的封闭性
⑵ r=r1r2。
f(L)=f(L(r))
=f(L(r1r2))
=f(L(r1) L(r2)) RE的定义
=f(L(r1)) f(L(r2)) 正则代换的定义
=L(f(r1)) L (f (r2)) 归纳假设
=L(f(r1) f (r2)) RE的定义
=L(f(r1r2)) RE的正则代换的定义
=L(f(r))
2009-7-26 434
5.2 RL的封闭性
⑶ r=r1*。
f(L)=f(L(r))
=f(L(r1*))
=f(L(r1)*) RE的定义
=(f(L(r1)))* 正则代换的定义
=(L(f(r1)))* 归纳假设
=L(f(r1)*) RE的定义
=L(f(r1*)) RE的正则代换的定义
=L(f(r))
2009-7-26 435
5.2 RL的封闭性
例 5-5设 ∑ ={0,1,2},Δ ={a,b},正则代换 f定义为:
f(0)=ab;
f(1)=b*a*;
f(2)=a*(a+b)
则:
⑴ f(00)=abab;
⑵ f(010)=abb*a*ab=ab+a+b;
2009-7-26 436
5.2 RL的封闭性
⑶ f((0+1+2)*)=(ab+b*a*+ a*(a+b))*
=(b*a*+a*(a+b))*=(a+b)*;
⑷ f(0(0+1+2)*)=ab(ab+b*a*+ a*(a+b))*
=ab(a+b)*;
⑸ f(012)=abb*a* a* (a+b)= ab+a*(a+b);
⑹ f((0+1)*)=(ab+ b*a* )*
=(ab+b+a+ b*a* )*=(a+b)*。
2009-7-26 437
5.2 RL的封闭性
同态映射 (homomorphism)
设 ∑,Δ 是两个字母表,
*,f
f为映射,如果对于?x,y∈∑ *,
f(xy)=f(x)f(y),
则称 f为从 ∑ 到 Δ *的 同态映射。
2009-7-26 438
5.2 RL的封闭性
对于?L?∑ *,L的同态像
Lx
xfLf
)()(
对于?w?Δ *,w的同态原像是一个集合
}&)(|{)( *1 xwxfxwf
对于?L?Δ *,L的同态原像是一个集合
})(|{)(1 LxfxLf
2009-7-26 439
5.2 RL的封闭性
例 5-6设 ∑ ={0,1},Δ ={a,b},同态映射
f定义为
f(0)=aa
f(1)=aba
则:
⑴ f(01)=aaaba;
⑵ f((01)*)=(aaaba)*;
⑶ f -1(aab)=Φ;
2009-7-26 440
5.2 RL的封闭性
⑷ f -1(aa)={0};
⑸ f -1({aaa,aba,abaaaaa,abaaaaaa})
={1,100};
⑹ f -1((ab+ba)*a)={1};
⑺ f(f -1((ab+ba)*a))=f({1})={aba}。
令 L=(ab+ba)*a,上述 (7)表明,f(f -1(L)) ≠ L
f(f -1(L))?L
2009-7-26 441
5.2 RL的封闭性推论 5-1 RL 的同态像是 RL。
证明:
注意到同态映射是正则代换的特例,可以直接的到此结论。
该定理表明,RL 在同态映射下是封闭的。
2009-7-26 442
5.2 RL的封闭性定理 5-5 RL 的同态原像是 RL 。
证明:
使用 DFA作为描述工具。
(1) 接受 RL的同态原像的 FA的构造思想。
让新构造出的 FA M′ 用一个移动去模拟 M处理 f(a)
所用的一系列移动。
对于 ∑ 中的任意字符 a,如果 M从状态 q开始处理
f(a),并且当它处理完 f(a)时到达状态 p,则让 M′ 在状态 q读入 a时,将状态变成 p。
2009-7-26 443
5.2 RL的封闭性
M′ 具有与 M相同的状态,并且,在 M′ 对应的状态转移图中,从状态 q到状态 p有一条标记为 a的弧当且仅当在 M的状态转移图中,有一条从状态 q到状态 p的标记为 f(a)的路。
(2) 接受 RL的同态原像的 FA的形式描述。
设 DFA M=(Q,Δ,δ,q0,F),L(M)=L,
取 DFA M′=(Q,∑,δ ′,q0,F)
δ ′(q,a)= δ (q,f(a))
2009-7-26 444
5.2 RL的封闭性
(3) 等价证明。
施归纳于 |x|,证明对于?x∈∑ *,
δ ′(q0,x)=δ (q0,f(x))
当 |x|=0时,结论显然成立。
设当 |x|=k是结论成立,往证当 |x|=k+1时结论成立。
不妨设 x=ya,其中 |y|=k
2009-7-26 445
5.2 RL的封闭性
δ ′ (q0,x)=δ ′ (q0,ya)
=δ ′ (δ ′ (q0,y),a)
=δ ′ (δ (q0,f(y)),a) 归纳假设
=δ (δ (q0,f(y)),f(a)) δ ′ 的定义
=δ (q0,f(y)f(a)) δ 的意义
=δ (q0,f(ya)) 同态映射性质
=δ (q0,f(x))
2009-7-26 446
5.2 RL的封闭性这表明,结论对 |x|=k+1成立 。 由归纳法原理,结论对?x∈ ∑*成立 。
x∈∑ *,δ ′(q0,x)∈ F? δ (q0,f(x)) ∈ F。
由于对?x∈ ∑*,δ′(q0,x)=δ(q0,f(x)),
所以,
δ′(q0,x)∈ F? δ(q0,f(x))∈ F。
故
L(M′)=f-1(L(M))
定理得证。
2009-7-26 447
5.2 RL的封闭性
商 (quotient)
设 L1,L2?∑ *,L2除以 L1的 商 定义为:
L1/L2={x|?y∈ L2使得 xy∈ L1}。
计算语言的商主要是考虑语言句子的后缀。
只有当 L1的句子的后缀在 L2中时,其相应的前缀才属于 L1/L2。所以,当 ε ∈ L2时,
L1? L1/L2。
2009-7-26 448
5.2 RL的封闭性
注意以下有意思的情况:
取 L1={000},L2={ε },L3={ε,0}
L4={ε,0,00},L5={ε,0,00,000}
L1/L2={000}= L1
L1/L3={000,00}
L1/L4={000,00,0}
L1/L5={000,00,0,ε }
2009-7-26 449
5.2 RL的封闭性定理 5-6 L1,L2?∑ *,如果 L1是 RL,则
L1/L2也是 RL 。
证明:设 L1?∑ *,是 RL,
DFA M=(Q,∑,δ,q0,F),L(M)=L1
DFA M′ =(Q,∑,δ,q0,F′ )
F′ ={q|?y∈ L2,δ (q,y)∈ F}
显然,
L(M′ )= L1/L2。
定理得证。
2009-7-26 450
5.3 Myhill-Nerode 定理与 DFA的极小化
对给定 RL L,DFA M接受 L,M不同,由 RM
确定的 ∑ *上的 等价类也可能不同。
如果 M是最小 DFA,则 M所给出的等价类的个数应该是最少的。
最小 DFA是不是惟一的?如果是,如何构造?
最小 DFA的状态对应的集合与其他 DFA的状态对应的集合有什么样的关系,用这种关系是否能从一般的 DFA出发,求出最小 DFA?
2009-7-26 451
5.3.1 Myhill-Nerode 定理
DFA M确定的等价关系。
M=(Q,∑,δ,q0,F),对于?x,y∈∑ *
x RM y?δ (q0,x)=δ (q0,y)。
显然,
x RM yq∈ Q,x,y∈ set(q)
2009-7-26 452
5.3.1 Myhill-Nerode 定理
例 5-8 设 L=0*10*,它对应的 DFA M如下图。
2009-7-26 453
5.3.1 Myhill-Nerode 定理对应于 q0,(00)n RM (00)m n,m? 0;
对应于 q1,0(00)n RM 0(00)m n,m? 0;
对应于 q2,(00)n1RM (00)m1 n,m? 0;
对应于 q3,0(00)n 1RM 0(00)m1 n,m? 0;
对应于 q4,0(00)n 10kRM 0(00)m10h n,
m? 0,k,h? 1;
(00)n10k RM (00)m10h n,m? 0,k,h? 1;
0(00)n 10kRM (00)m10h n,m? 0,k,h? 1;
也就是,0n 10kRM 0m10h n,m? 0,k,h? 1;
对应于 q5,x RM y——x,y为至少含两个 1的串。
2009-7-26 454
5.3.1 Myhill-Nerode 定理
L确定的 ∑ *上的关系 RL。
对于?x,y∈∑ *,
x RL y? (对?z∈∑ *,xz∈ L? zy∈ L)
对于?x,y∈∑ *,如果 x RL y,则在 x和 y后无论接 ∑ *中的任何串 z,xz和 yz要么都是 L
的句子,要么都不是 L的句子。
2009-7-26 455
5.3.1 Myhill-Nerode 定理任意 x,y∈ set(q),δ (q0,x)=δ (q0,y)=q
对于?z∈∑ *,
δ (q0,xz)=δ (δ (q0,x),z))
=δ (q,z)
=δ (δ (q0,y),z)
=δ (q0,yz)
这就是说,
δ (q0,xz)∈ F?δ (q0,yz)∈ F
2009-7-26 456
5.3.1 Myhill-Nerode 定理即,对于?z∈∑ *,
xz∈ L? yz∈ L。
表明,
x RL y,
也就是
x RL(M)y。
2009-7-26 457
5.3.1 Myhill-Nerode 定理
右不变的 (right lnvariant)等价关系设 R是 ∑ *上的等价关系,对于?x,
y∈∑ *,如果 x RL y,则必有 xz RL yz对于?z∈∑ *成立,则称 R是 右不变的 等价关系 。
2009-7-26 458
5.3.1 Myhill-Nerode 定理命题 5-1 对于任意 DFA M=(Q,∑,δ,q0,F),
M所确定的 ∑ *上的关系 RM为右不变的等价关系。
证明:
⑴ RM是等价关系 。
自反性显然 。
对称性,?x,y∈∑ *,
x RM y?δ (q0,x)=δ (q0,y) 根据 RM的定义;
δ (q0,y)=δ (q0,z),=”的对称性;
y RM x 根据 RM的定义。
2009-7-26 459
5.3.1 Myhill-Nerode 定理传递性:设 x RM y,y RM z。
由于 x RM y,δ (q0,x)=δ (q0,y)
由于 y RM z,δ (q0,y)=δ (q0,z)
由,=”的传递性知,
δ (q0,x)=δ (q0,z)
再由 RM的定义得:
x RM z
即 RM是等价关系。
2009-7-26 460
5.3.1 Myhill-Nerode 定理
⑵ RM 是右不变的设 x RM y。 则 δ (q0,x)=δ (q0,y)=q
所以,对于?z∈∑ *,
δ (q0,xz)=δ (δ (q0,x),z))
=δ (q,z)
=δ (δ (q0,y),z)
=δ (q0,yz)
这就是说,δ (q0,xz)=δ (q0,yz),再由 RM的定义,
xz RM yz
所以,RM 是右不变的等价关系。
2009-7-26 461
5.3.1 Myhill-Nerode 定理命题 5-2 对于任意 L?∑ *,L所确定的 ∑ *上的关系 RL为右不变的等价关系 。
证明:
⑴ RL是等价关系。
自反性显然 。
对称性:不难看出,x RL y? (对?z∈∑ *,
xz∈ L? yz∈ L)? y RL x
2009-7-26 462
5.3.1 Myhill-Nerode 定理传递性:设 x RL y,y RL z。
x RL y? (对?w∈∑ *,xw∈ L? yw∈ L)
y RL z? (对?w∈∑ *,yw∈ L? zw∈ L)
所以,
(?w∈∑ *,xw∈ L? yw∈ L 且 yw∈ L? zw∈ L)
即:
(对?w∈∑ *,xw∈ L? zw∈ L)
故:
x RL z
即 RL是等价关系。
2009-7-26 463
5.3.1 Myhill-Nerode 定理
⑵ RL 是右不变的。
设 x RL y。 由 RL的定义,对?w,v∈∑ *,
xwv∈ L? zwv∈ L,注意到 v的任意性,知,
xw RL yw。
所以,RL是右不变的等价关系。
2009-7-26 464
5.3.1 Myhill-Nerode 定理
指数 (index)
设 R是 ∑ *上的等价关系,则称 |∑ */R|是 R关于 ∑ *的 指数 。简称为 R的指数。简称 ∑ *的关于 R的一个等价类,也就是 ∑ */R的任意一个元素,为 R的一个等价类
2009-7-26 465
5.3.1 Myhill-Nerode 定理
例 5-9 图 5-4 所给 DFA M所确定的 RM的指数为 6。 RM将 ∑ *分成 6个等价类:
set(q0)={(00)n | n? 0};
set(q1)={0(00)n| n? 0};
set(q2)={(00)n1| n,m? 0};
set(q3)={0(00)n1|n? 0};
set(q4)={0n 10k|n? 0,k? 1};
set(q5)={x|x为至少含两个 1的串 }。
2009-7-26 466
5.3.1 Myhill-Nerode 定理
RM是 RL(M)的,加细,(refinement)
–?x,y∈∑ *,如果 x RM y,必有 x RL(M) y成立。
即对于任意 DFA M=(Q,∑,δ,q0,F)。
|∑ */RL(M)|? |∑ */RM|? |Q|
– 按照 RM中被分在同一等价类的串,在按照 RL(M)
分类时,一定会被分在同一个等价类。
– RM对 ∑ *的划分比 RL(M)对 ∑ *的划分更,细,。
称 RM是 RL(M)的,加细,(refinement)。
2009-7-26 467
5.3.1 Myhill-Nerode 定理
∑ */RM ={set(q0),set(q1),set(q2),set(q3),
set(q4),set(q5)}
⑴ 取 00∈ set(q0),000∈ set(q1)。
对于 任意的 x∈∑ *,当 x含且只含一个 1时,
00x∈ L(M),000x∈ L(M);当 x不含 1或者含多个 1时,00x?L(M),000x?L(M)。这就是说,
对于任意的 x∈∑ *,00x∈ L(M)? 000x∈ L(M)。
即按照 RL(M),00与 000被分在同一个等价类中。
从而 set(q0)和 set(q1) 被包含在 RL(M)的同一个等价类中。
2009-7-26 468
5.3.1 Myhill-Nerode 定理
⑵ 取 00∈ set(q0),001∈ set(q2)。
取 特殊的 字符串 1∈∑ *,001∈ L(M),但
0011?L(M)。 所以,根据 RL(M),set(q0)和
set(q2)不能被,合并,到一个等价类中 。
类似地,根据 RL(M),set(q3),set(q4),set(q5)
也都不能被,合并,到 set(q0)的句子所在的等价类中。
2009-7-26 469
5.3.1 Myhill-Nerode 定理
⑶ 取 001∈ set(q2),01∈ set(q3)。
对于 任意的 x∈∑ *,x要么不含 1,要么含有 1。
当 x不含 1时,001x∈ L(M),01x∈ L(M);
当 x含有 1时,001x?L(M),01x?L(M)。这就是说,对于任意的 x∈∑ *,001x∈ L(M)
01x∈ L(M)。即按照 RL(M),001与 01属于
RL(M)的同一个等价类中。从而 set(q2)和
set(q3) 被包含在 RL(M)的同一个等价类中。
2009-7-26 470
5.3.1 Myhill-Nerode 定理
⑷ 取 1∈ set(q2),10∈ set(q4)。
对于 任意的 x∈∑ *,x要么不含 1,要么含有 1。
当 x不含 1时,1x∈ L(M),10x∈ L(M);当 x
含有 1时,1x?L(M),10x?L(M)。这就是说,对于任意的 x∈∑ *,1x∈ L(M)?
10x∈ L(M)。即按照 RL(M),1与 10被分在
RL(M)的同一个等价类中。从而在 set(q2)和
set(q4)被包含在 RL(M)的同一个等价类中。
2009-7-26 471
5.3.1 Myhill-Nerode 定理
⑸ 取 1∈ set(q2),11∈ set(q5)。
注意到 1ε =1,11ε =11;而 1∈ L(M),
11?L(M)。即 1和 11不满足关系 RL(M),所以,set(q2)和 set(q5)不能被,合并,到 RL(M)
的同一个等价类中。在这里,ε ∈∑ *是一个 特殊的 字符串。
2009-7-26 472
5.3.1 Myhill-Nerode 定理
∑ */RL(M)={ set(q0)∪ set(q1),
set(q2)∪ set(q3)∪ set(q4),set(q5)}
不含 1,[0]= set(q0)∪ set(q1)=0*;
含一个 1,[1]= set(q2)∪ set(q3)∪ set(q4)=0*10*;
含多个 1,[11]= set(q5)=0*10*1(0+1)* 。
2009-7-26 473
5.3.1 Myhill-Nerode 定理定理 5-1 (Myhill-Nerode定理 )如下三个命题等价:
⑴ L?∑ *是 RL ;
⑵ L是 ∑ *上的某一个具有有穷指数的右不变等价关系 R的某些等价类的并;
⑶ RL具有有穷指数 。
2009-7-26 474
5.3.1 Myhill-Nerode 定理证明:
由 (1)可以推出 (2)
设 L?∑ *是 RL,所以,存在 DFA M=(Q,∑,δ,
q0,F),使得 L(M)=L。由命题 5-3-1,RM是 ∑ *上的右不变等价关系,而且 |∑ */RM|? |Q|,所以,
RM具有有穷指数。而
Fq
qse tL
)(
L是 ∑ *上的具有有穷指数的右不变等价关系 RM的、
对应于 M的终止状态的等价类的并。
2009-7-26 475
5.3.1 Myhill-Nerode 定理
由 (2)可以推出 (3)。
设 x R y,由 R的右不变性可知,对于任意 z∈∑ *,
xz R yz
而 L是 R的某些等价类的并,所以,
xz∈ L? yz∈ L
根据 RL的定义,
x RL y
故 R是 RL的加细。由于 R具有有穷指数,所以,RL
具有有穷指。
2009-7-26 476
5.3.1 Myhill-Nerode 定理
由 (3)可以推出 (1)。
令 M′ =(∑ */RL,∑,δ ′,[ε ],{[x]|x∈ L})
[ε ]表示 ε 所在的等价类对应的状态;
[x] 表示 x所在的等价类对应的状态 。
对于?([x],a)∈ (∑ */RL)× ∑,δ ′ ([x],a)=[xa]
δ ′ 定义的相容性
L(M′ )=L
2009-7-26 477
5.3.1 Myhill-Nerode 定理
例 5-10用定理 5-7证明 {0n1n|n? 0}不是 RL
– 根据 L的句子的特征来寻找 RL的等价类 。
– L的句子的主要特点有两个:
⑴ 句子中所含的字符 0的个数与所含的字符 1的个数相同 。
⑵ 所有的 0都在所有的 1的前面
– 可以得到如下一些等价类 。
2009-7-26 478
5.3.1 Myhill-Nerode 定理
[10]={x|x=0n1m(m? n+1)或者 x中含子串 10}
[ε]——ε所在的等价类;
[1]——0所在的等价类;
[2]——00所在的等价类;
[3]——000所在的等价类;
…
[n]——0n所在的等价类;
…
所以,RL的指数是无穷的。因此,L不是 RL。
2009-7-26 479
5.3.1 Myhill-Nerode 定理推论 5-1 对于任意的 RL L,如果 DFA M=(Q,
∑,δ,q0,F)满足 L(M)=L,则
|∑ */RL|? |Q|。
表明,对于任意 DFA M=(Q,∑,δ,q0,
F),|Q|? |∑ */RL(M)|。
也表明,对任意一个 RL L,按照定理中所给的方法构造出来的 DFA M′ 是一个接受
L的最小 DFA。这个 DFA是惟一的么?
2009-7-26 480
5.3.1 Myhill-Nerode 定理推论 5-2对于任意的 RL L,在同构意义下,接受 L的最小 DFA是惟一的。
证明:
接受 L的最小 DFA M=(Q,∑,δ,q0,F)的状态数与 RL的指数相同,也就是说,这个最小 DFA的状态数与 Myhill-Nerode定理证明中构造的 M′=(∑ */RL,∑,δ ′,[ε ],
{[x]|x∈L}) 的状态数是相同的。
2009-7-26 481
5.3.1 Myhill-Nerode 定理
DFA同构是指这两个 DFA的状态之间有一个一一对应,而且这个一一对应还保持状态转移也是相应一一对应的。也就是说,
如果 q与 [w]对应,p与 [z]对应,当 δ (q,
a)=p时,必定有 δ ([w],a)=[z]。
这两个 DFA是同构。定义映射 f
f(q)=f(δ (q0,x))= δ ′ ([ε ],x)=[x]
δ (q0,x)=q
2009-7-26 482
5.3.1 Myhill-Nerode 定理
f为 Q与 ∑ */RL之间的一一对应
– 如果 δ (q0,x)=δ (q0,y),则 x RM y
– 由于 RM是 RL的加细,所以,x RL y
– 故,[x]=[y],即,δ ′ ([ε ],x)=δ ′ ([ε ],y)。
– 如果,δ (q0,x)≠ δ (q0,y)
– 则,δ ′ ([ε ],x)≠ δ ′ ([ε ],y)
– 即,[x]≠ [y]
– 否则,|∑ */RM |>|∑ */RL |。
2009-7-26 483
5.3.1 Myhill-Nerode 定理
如果 δ (q,a)=p,f(q)= [x],必有 f(p)=[xa]
–? q∈ Q,如果,f(q)=f(δ (q0,x))=[x]
– 所以,? a∈∑,如果,
– p=δ (q,a)=δ (δ (q0,x),a)=δ (q0,xa)
– 则 f(p)=f(δ (q,a))= f(δ (δ (q0,x),
a))=f(δ (q0,xa))=[xa]
– 即,如果 M在状态 q读入字符 a时进入状态 p,
则 M在 q对应的状态 f(δ (q0,x))=[x]读入字符 a
时,进入 p对应的状态 f(δ (q0,xa) )=[xa]。 所以,f是 M和 M′ 之间的同构映射 。
2009-7-26 484
5.3.2 DFA的极小化
可以区分的 (distinguishable)状态
设 DFA M=(Q,∑,δ,q0,F),如果
x∈∑ *,对 Q中的两个状态 q和 p,使得
δ (q,x)∈ F 和 δ (p,x)∈ F中,有且仅有一个成立,则称 p和 q是 可以区分的 。否则,
称 q和 p等价。并记作 q≡ p 。
2009-7-26 485
5.3.2 DFA的极小化算法 5-1 DFA的极小化算法
算法思想:扫描所有的状态对,找出所有的可区分的状态对,不可取分的状态对一定是等价的 。
输入:给定的 DFA。
输出:可区分状态表 。
主要数据结构:状态对的关联链表;可区分状态表。
2009-7-26 486
5.3.2 DFA的极小化
主要步骤
⑴ for?(q,p)∈ F× (Q-F) do
标记可区分状态表中的表项 (q,p);
⑵ for?(q,p)∈ F× F∪ (Q-F)× (Q-F)&q≠ p do
⑶ if?a∈∑,可区分状态表中的表项 (δ (q,a),δ (p,a))
已被标记 then
begin
⑷ 标记可区分状态表中的表项 (q,p);
⑸ 递归地标记本次被标记的状态对的关联链表上的各个状态对在可区分状态表中的对应表项
end
2009-7-26 487
5.3.2 DFA的极小化
⑹ else for? a∈∑,do
⑺ if δ (q,a)≠ δ (p,a) &(q,p)与 (δ (q,
a),δ (p,a))不是同一个状态对 then
将 (q,p)放在 (δ (q,a),δ (p,a))
的关联链表上。
2009-7-26 488
5.3.2 DFA的极小化定理 5-8对于任意 DFA M=(Q,∑,δ,q0,
F),Q中的两个状态 q和 p是可区分的充要条件是 (q,p)在 DFA的极小化算法中被标记。
证明:
先证必要性。
设 q和 p是可区分的,x是区分 q和 p的最短字符串。
现施归纳于 x的长度,证明 (q,p)一定被算法标记。
2009-7-26 489
5.3.2 DFA的极小化
当 |x|=0时
ε 区分 q和 p,表明 q和 p有且仅有一个为 M的终止状态,所以,
(q,p)∈ F× (Q-F)
因此,它在算法的第 (1)行被标记。
设当 |x|=n时结论成立
x是区分 q和 p的长度为 n的字符串,则 (q,p)
被算法标记。
2009-7-26 490
5.3.2 DFA的极小化
当 |x|=n+1时设 x=ay,其中 |y|=n。 由于 x是区分 q和 p的最短的字符串,所以,δ (q,x)∈ F 和 δ (p,
x)∈ F中,有且仅有一个成立 。 不妨假设:
δ (q,x)?F,δ (p,x)∈ F
即 δ (δ (q,a),y)?F,δ (δ (p,a),y)∈ F
设 δ (q,a)=u,δ (p,a)=v
y是区分 u和 v的长度为 n的字符串 。
2009-7-26 491
5.3.2 DFA的极小化由归纳假设,(u,v)可以被算法标记 。
如果在考察 (q,p)时,(u,v)已经被标记,
则 (q,p)在算法的第 (4)行被标记;
如果在考察 (q,p)时,(u,v)还没有被标记,
则 (q,p)在算法的第 (7)行被放入到 (u,v)的关联链表中,而当 (u,v)被标记时,在算法的第 (5)行在,递归,过程中 (q,p)被标记。
结论对 |x|=n+1成立。
2009-7-26 492
5.3.2 DFA的极小化
充分性。
设 (q,p)在算法中被标记。对它被标记的顺序 n施归纳,证明 q和 p是可区分的。
令 |F× (Q-F)|=m,显然,当 1? n? m时,(q,
p)是在算法的第 (1)行被标记的,此时,ε
是区分 q和 p的字符串:
δ (q,ε )∈ F和 δ (p,ε )∈ F
有且仅有一个成立。
2009-7-26 493
5.3.2 DFA的极小化
设 n? k(k? m)时结论成立 。 即,如果 (q,p)是被算法在第 k个或者第 k个之前标记的,则存在字符串 x,x区分 q和 p。 即,δ (q,x)∈ F 和 δ (p,
x)∈ F有且仅有一个成立 。
当 n=k+1时,如果 (q,p)是在算法的第 (4)行被标记的,此时,(δ (q,a),δ (p,a))一定是在第 k
个之前被标记的 。 设 δ (q,a)=u,δ (p,a)=v,
由归纳假设,存在字符串 x,x区分 u和 v:
δ (u,x)∈ F 和 δ (v,x)∈ F
有且仅有一个成立,从而,
δ (q,ax)∈ F 和 δ (p,ax)∈ F
有且仅有一个成立 。 即,ax是区分 q和 p的字符串 。
2009-7-26 494
5.3.2 DFA的极小化
如果 (q,p)是在算法的第 (5)行被标记的,
则它必在某个状态对 (u,v)的关联链表中,
而 (u,v)必在 (q,p)之前被标记 。 由归纳假设,存在 x区分 (u,v);
存在 a∈∑,δ (q,a)=u,δ (p,a)=v使得
(q,p)被放在 (u,v)的关联链表中; ax是区分 q和 p的字符串 。
所以,结论对 n=k+1成立。由归纳法原理,
结论对所有的 n成立。
2009-7-26 495
5.3.2 DFA的极小化定理 5-9 由算法 5-1构造的 DFA在去掉不可达状态是最小 DFA 。
证明:
设 M=(Q,∑,δ,q0,F)为算法 5-1的输入 DFA,
M′ =(Q/≡,∑,δ ′,[q0],F′ )是相应的输出 DFA。 F′ ={[q]|q∈ F}。
对于?[q]∈ Q/≡,?a∈∑,定义
δ ′ ([q],a)=[δ (q,a)]
2009-7-26 496
5.3.2 DFA的极小化
δ ′ 的相容性。
– 设 [q]=[p],也就是说,q和 p等价,q≡ p。即根据算法 5-1,状态 q和 p是不可区分的 (未被算法标记 )。此时,对于?a∈∑,必须有 [δ (q,
a)]≡ [δ (p,a)]。否则,状态对 (δ (q,a),
δ (p,a))必定被算法标记,从而最终导致 (q,
p)被算法标记。此与 q≡ p矛盾。所以,状态
[δ (q,a)]和状态 [δ (p,a)] 等价,δ (q,
a)=δ (p,a)。所以,δ ′ 的定义是相容的。
2009-7-26 497
5.3.2 DFA的极小化
L(M′ )=L(M)。
– 对?x∈∑ *,现施归纳于 |x|,证明 δ ′ ([q0],x)=[δ (q0,x)]
– |x|=0
δ ′ ([q0],ε )=[q0]=[δ (q0,ε )]
–?x∈∑ *并且 |x|=n,
δ ′ ([q0],xa)=δ ′ (δ ′ ([q0],x),a)
=δ ′ ([δ (q0,x)],a)
=[δ ([δ (q0,x)],a)]
=[δ (q0,xa)]
– 由归纳法原理,结论对?x∈∑ *成立。
2009-7-26 498
5.3.2 DFA的极小化
再由 F′ 的定义,
δ ′ ([q0],x)=[δ (q0,x)]∈ F′? δ (q0,
x)∈ F。
所以,
x∈ L(M′ )? x∈ L(M)。
即:
L(M′ )=L(M)。
2009-7-26 499
5.3.2 DFA的极小化
证明所构造的 M′去掉不可达状态后是最小
DFA。
– 如果 [q]≠ [p],则对于?x∈ set([q]),
y∈ set([p]),x RL y不成立。事实上,如果
[q]≠ [p],则存在 z∈∑ *,z区分 q和 p,有 δ (q,
z)=q′ 和 δ (p,z)= p′有且仅有一个是终止状态,
这就是说,xz和 yz有且仅有一个是 L的句子。
所以,x RL y是不成立的。
2009-7-26 500
5.3.2 DFA的极小化
例 5-11用算法 5-1对图 5-4所给的 DFA进行极小化。
q1
q2 × ×
q3 × ×
q4 × ×
q5 × × × × ×
q0 q1 q2 q3 q4
2009-7-26 501
5.3.2 DFA的极小化
2009-7-26 502
5.3.2 DFA的极小化
例 5-11用算法 5-1对图 5-7所给的 DFA进行极小化。
2009-7-26 503
5.3.2 DFA的极小化
q1 ×
q2 × ×
q3 × × ×
q4 × × × ×
q5 × × × × ×
q6 × × × × × ×
q7 × × × × × × ×
q8 × × × × × × × ×
q0 q1 q2 q3 q4 q5 q6 q7
2009-7-26 504
5.4 关于正则语言的判定算法定理 5-10 设 DFA M=(Q,∑,δ,q0,F),
L=L(M)非空的充分必要条件是:存在
x∈∑ *,|x|<|Q|,δ (q0,x)∈ F。
证明:充分性显然。
必要性,M的状态转移图中必存在一条从 q0
到某一个终止状态 qf且无 重复状态的路,此路中的状态数 n? |Q|。此路的标记 x满足
|x|? n-1。而 δ (q0,x)∈ F。即 x是 L=L(M)
的长度小于 |Q|的句子。
2009-7-26 505
5.4 关于正则语言的判定算法定理 5-11设 DFA M=(Q,∑,δ,q0,F),
L=L(M)为无穷的充分必要条件是:存在
x∈∑ *,|Q|? |x|<2|Q|,δ (q0,x)∈ F。
算法通过判定是否存在 x∈∑ *,
|Q|? |x|<2|Q|,δ (q0,x)∈ F即可。
2009-7-26 506
5.4 关于正则语言的判定算法定理 5-12 设 DFA M1=(Q1,∑,δ 1,q01,
F1),DFA M2=(Q2,∑,δ 2,q02,F2),
则存在判定 M1与 M2是否等价的算法。
通过判定两个 DFA的极小 DFA是否同构就可以判定它们是否等价。
2009-7-26 507
5.4 关于正则语言的判定算法定理 5-13 设 L是字母表 ∑ 上的 RL,对任意
x∈∑ *,存在判定 x是不是 L的句子的算法。
从一定的意义上讲,接受 L的 DFA M就是判定 x是否 L的一个桔子的“算法”。
2009-7-26 508
5.5 小结本章讨论了 RL的性质 。 包括,RL 的泵引理,RL 关于并,乘积,闭包,补,交,
正则代换,同态,逆同态等运算的封闭性 。
Myhill-Nerode定理与 FA的极小化 。
⑴ 泵引理。泵引理是用 RL的必要条件来用来证明一个语言不是 RL 的。它不能用来证明一个语言是 RL,而且是采用反证法。
2009-7-26 509
5.5 小结
⑵ RL 对有关运算的封闭性 。 RL 在并,乘,
闭包,补,交,正则代换,同态映射运算下是有效封闭的 。 RL 的同态原像是 RL 。
⑶ 设 L1,L2?∑ *,如果 L1是 RL,则 L1/L2
也是 RL 。
2009-7-26 510
5.5 小结
⑷ 如果 L是 RL,则根据 RL确定的 ∑ *的等价类可以构造出接受 L的最小 DFA。 更方便的方法是通过确定给定 DFA状态的可区分性构造出等价的最小 DFA。
⑸ 存在判定 L(M)是非空,M1与 M2是否等价,
L(M)是否无穷,x是不是 RL L的句子的算法 。
2009-7-26 511
第 6章 上下文无关语言
Gbra,S?S(S)|ε
L(Gbra)不是 RL,是 CFL
hh nnnnnn 10......1010 221`1
高级程序设计语言的绝大多数语法结构都可以用上下文无关文法 (CFG)描述。。
BNF(巴科斯范式,Backus normal form,
又叫 Backus-naur form)。
2009-7-26 512
第 6章 上下文无关语言
主要内容
– 关于 CFL的分析
派生和归约,派生树
– CFG的化简
无用符,单一产生式,空产生式
– CFG的范式
CNF
GNF
– CFG的自嵌套特性
2009-7-26 513
第 6章 上下文无关语言
重点
– CFG的化简 。
– CFG到 GNF的转换 。
难点
– CFG到 GNF的转换,特别是其中的用右递归替换左递归的问题。
2009-7-26 514
6.1 上下文无关语言
文法 G=(V,T,P,S)被称为是上下文无关的。 如果除了形如 A?ε 的产生式之外,
对于?α?β ∈ P,均有 |β |? |α |,并且
α ∈ V成立。
关键:对于?A∈ V,如果 A?β ∈ P,则无论 A出现在句型的任何位置,我们都可以将
A替换成 β,而不考虑 A的上下文。
2009-7-26 515
6.1.1 上下文无关文法的派生树
算术表达式的文法
Gexp1,E?E+T|E-T|T
T?T*F|T/F|F
F?F↑ P|P
P?(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
2009-7-26 516
6.1.1 上下文无关文法的派生树
算术表达式 x+x/y↑2 的不同派生
E?E+T?T+T?F+T?P+T?x+T?x+T/F?x+F/F
x+P/F?x+x/F?x+x/F↑ P?x+x/P↑ P?x+x/y↑ P
x+x/y↑ 2
E?E+T?E+T/F?E+T/F↑P?E+T/F↑2?E+T/P↑2
E+T/y↑2?E+F/y↑2? E+P/y↑2?E+x/y↑2
T+x/y↑2? F+x/y↑2? P+x/y↑2?x+x/y↑ 2
E?E+T?T+T?T+T/F?F+T/F?F+T/F↑P
P+T/F↑P?x+T/F↑P?x+F/F↑P?x+F/F↑2
x+F/P↑2?x+P/P↑2?x+P/y↑2?x+x/y↑ 2
2009-7-26 517
6.1.1 上下文无关文法的派生树
文法 Gexp1句子 x+x/y↑2 的结构。
2009-7-26 518
6.1.1 上下文无关文法的派生树
派生树 (derivation tree)
– 一棵 (有序 )树 (ordered tree)
– 树的每个顶点有一个标记 X,且 X∈ V∪ T∪ {ε }
– 树根的标记为 S;
– 如果非叶子顶点 v标记为 A,v的儿子从左到右依次为 v1,v2,…,vn,并且它们分别标记为
X1,X2,…,Xn,则 A?X1X2… Xn∈ P;
– 如果 X是一个非叶子顶点的标记,则 X∈ V;
– 如果顶点 v标记为 ε,则 v是该树的叶子,并且
v是其父顶点的惟一儿子。
2009-7-26 519
6.1.1 上下文无关文法的派生树
别称
– 生成树
– 分析树 (parse tree)
– 语法树 (syntax tree)
顺序
– v1,v2是派生树 T的两个不同顶点,如果存在顶点 v,v至少有两个儿子,使得 v1是 v的较左儿子的后代,v2是 v的较右儿子的后代,则称顶点 v1
在顶点 v2的左边,顶点 v2在顶点 v1的右边。
2009-7-26 520
6.1.1 上下文无关文法的派生树
结果 (yield)
派生树 T的所有叶子顶点从左到右依次标记为 X1,X2,…,Xn,则称符号串 X1X2… Xn
是 T的 结果。
一个文法可以有多棵派生树,它们可以有不同的结果。
句型 α的派生树:,G的结果为 α 的派生树,。
2009-7-26 521
6.1.1 上下文无关文法的派生树
派生子树 (subtree)
满足派生树定义中除了对跟结点的标记的要求以外各条的树叫 派生子树 (subtree)。
如果这个子树的根标记为 A,则称之为 A子树。
惟一差别是根结点可以标记非开始符号。
2009-7-26 522
6.1.1 上下文无关文法的派生树定理 6-1设 CFG G=(V,T,P,S),S?*α 的充分必要条件为 G有一棵结果为 α 的派生树 。
证明:
证一个更为一般的结论:对于任意 A∈ V,
A?*α 的充分必要条件为 G有一棵结果为 α 的 A-
子树。
充分性:设 G有一棵结果为 α 的 A-子树,非叶子顶点的个数 n施归纳,证明 A?*α 成立。
2009-7-26 523
6.1.1 上下文无关文法的派生树
设 A-子树有 k+1个非叶子顶点,根顶点 A的儿子从左到右依次为 v1,v2,…,vm,并且它们分别标记为 X1,X2,…,Xm 。
A?X1X2… Xm∈ P 。
以 X1,X2,…,Xm为根的子树的结果依次为 α 1,α 2,…,α m 。
X1,X2,…,Xm为根的子树的非叶子顶点的个数均不大于 k。
2009-7-26 524
6.1.1 上下文无关文法的派生树
X1?*α 1
X2?*α 2
…
Xm?*α m
而且
α =α 1α 2… α m
2009-7-26 525
6.1.1 上下文无关文法的派生树
A?X1X2… Xm
*α 1X2… Xm
*α 1α 2… Xm
…
*α 1α 2… α m
2009-7-26 526
6.1.1 上下文无关文法的派生树
2009-7-26 527
6.1.1 上下文无关文法的派生树
必要性
– 设 A?nα,现施归纳于派生步数 n,证明存在结果为 α
的 A-子树。
设 n≤k(k≥1)时结论成立,往证当 n=k+1时结论也成立:令
A?k+1α,则有:
A?X1X2… Xm
*α1X2… Xm
*α1α2… Xm
…
*α 1α 2… α m
2009-7-26 528
6.1.1 上下文无关文法的派生树
2009-7-26 529
6.1.1 上下文无关文法的派生树
例 6-1设 Gbra,S?S(S)|ε,(()(()))和 (S)((S))
的派生树。
2009-7-26 530
6.1.1 上下文无关文法的派生树
关于标记 ε 的结点
2009-7-26 531
6.1.1 上下文无关文法的派生树
最左派生 (leftmost derivation)
– α 的派生过程中,每一步都是对当前句型的最左变量进行替换。
左句型 (left sentencial form)
– 最左派生得到的句型可叫做左句型。
最右归约 (rightmost reduction)
– 与最左派生对相的归约叫做最有归约。
2009-7-26 532
6.1.1 上下文无关文法的派生树
最右派生 (rightmost derivation)
– α 的派生过程中,每一步都是对当前句型的最右变量进行替换。
右句型 (right sentencial form)
– 最右派生得到的句型可叫做右句型。
最左归约 (leftmost reduction)
– 与最左派生对相的归约叫做最右归约。
2009-7-26 533
6.1.1 上下文无关文法的派生树
规范派生 (normal derivation)
– 最右派生。
规范句型 (normal sentencial form)
– 规范派生产生的句型。
规范归约 (normal reduction)
– 最左归约。
2009-7-26 534
6.1.1 上下文无关文法的派生树定理 6-2如果 α 是 CFG G的一个句型,则 G中存在 α 的最左派生和最右派生。
证明:
基本思路,对派生的步数 n施归纳,证明对于任意 A∈ V,如果 A?nα,在 G中,存在对应的从 A到 α 的最左派生,A?n左 α 。
2009-7-26 535
6.1.1 上下文无关文法的派生树
A?X1X2… Xm
*α 1X2… Xm
*α 1α 2… Xm
…
*α 1α 2… α m
A?左 X1X2… Xm
*左 α1X2… Xm
*左 α1α2… Xm
…
*左 α 1α 2… α m
同理可证,句型 α 有最右派生。
2009-7-26 536
6.1.1 上下文无关文法的派生树定理 6-3 如果 α 是 CFG G的一个句型,α 的派生树与最左派生和最右派生是一一对应的,但是,这棵派生树可以对应多个不同的派生。
2009-7-26 537
6.1.2 二义性
简单算术表达式的二义性文法
Gexp2,E?E+E|E-E|E/E|E*E
E?E↑E|(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
2009-7-26 538
6.1.2 二义性
E? E+E
x+E
x+E/E
x+x/E
x+x/E↑E
x+x/y↑E
x+x/y↑ 2
句子 x+x/y↑ 2在文法中的三个不同的最左派生
E? E/E
E+E/E
x+E/E
x+x/E
x+x/E↑E
x+x/y↑E
x+x/y↑ 2
E? E↑ E
E/E↑ E
E+E/E↑ E
x+E/E↑ E
x+x/E↑ E
x+x/y↑ E
x+x/y↑ 2
2009-7-26 539
6.1.2
二义性对应 3
个不同的语法树
2009-7-26 540
6.1.2 二义性
二义性 (ambiguity)
CFG G=(V,T,P,S),如果存在 w∈ L(G),
w至少有两棵不同的派生树,则称 G是 二义性的 。否则,G为非二义性的。
二义性的问题是 不可解的 (unsolvable)问题。
2009-7-26 541
6.1.2 二义性
例 6-2 用其他方法消除二义性。
Gifa,S?if E then S else S | if E then S
Gifm,S→ U|M
U→ if E then S
U→ if E then M else U
M→ if E then M else M|S
Gifh,S→ TS|CS
C→ if E then
T → CS else
2009-7-26 542
6.1.2 二义性
例 6-3 设
Lambiguity={0n1n2m3m|n,m? 1}∪ {0n1m2m3n|n,m? 1}
可以用如下文法产生语言 Lambiguity:
G,S?AB|0C3
A?01|0A1
B?23|2B3
C?0C3|12|1D2
D?12|1D2
语言 Lambiguity不存在非二义性的文法。
2009-7-26 543
6.1.2 二义性
固有二义性的 (inherent ambiguity)
如果语言 L不存在非二义性文法,则称 L是固有二义性的,又称 L是 先天二义性的。
文法可以是二义性的。
语言可以是固有二义性的。
2009-7-26 544
6.1.3 自顶向下的分析和自底向上的分析
自顶向下的分析方法
– 通过考察是否可以从给定文法的开始符号派生出一个符号串,可以判定一个符号串是否为该文法的句子。
例
– S?aAb|bBa
– A?aAb|bBa
– B?d
2009-7-26 545
aabdabb的派生树的自顶向下的“生长”过程
2009-7-26 546
6.1.3 自顶向下的分析和自底向上的分析
自底向上 的分析方法
–通过考察是否可以将一个符号串归约为给定文法的开始符号,完成判定一个符号串是否为该文法的句子的任务。
和归约与派生是互逆过程相对应,自顶向下的分析与自底向上的分析互逆的分析过程。
2009-7-26 547
aabdabb的派生树的自底向上的“生长”过程
2009-7-26 548
6.2 上下文无关文法的化简
如下文法 含有无用的“东西”
G1,S?0|0A|E
A?ε|0A|1A|B
B?_C
C?0|1|0C|1C
D?1|1D|2D
E?0E2|E02
去掉 无用“东西”
后的 文法
G2,S?0|0A
A?ε|0A|1A|B
B?_C
C?0|1|0C|1C
2009-7-26 549
6.2 上下文无关文法的化简
去掉产生式 A?ε后的 文法
G3,S?0|0A
A?0|1|0A|1A|B
B?_C
C?0|1|0C|1C
去掉产生式 A?B后的文法
G4,S?0|0A
A?0|1|0A|1A| _C
C?0|1|0C|1C
可以去掉文法中的无用符号,ε产生式和单一产生式。
2009-7-26 550
6.2.1 去无用符号
无用符号 (useless symbol)
–对于任意 X∈ V∪ T,如果存在 w∈ L(G),
X出现在 w的派生过程中,即存在 α,
β∈ (V∪ T)*,使得 S?*αXβ?*w,则称 X
是有用的,否则,称 X是 无用符号。
对 CFG G=(V,T,P,S)
⑴ G中的符号 X既可能是有用的,也可能是无用的。当 X是无用的时候,它既可能是终极符号,也可能是语法变量。
2009-7-26 551
6.2.1 去无用符号
⑵ 对于任意 X∈ V∪ T,如果 X是有用的,
它必须同时满足如下两个条件:
① 存在 w∈ T*,使得 X?*w;
② α,β∈ (V∪ T)*,使得 S?*αXβ。
⑶ 注意到文法是语言的有穷描述,所以,
集合 V,T,P都是有穷的。从而我们有可能构造出有效的算法,来完成消除文法的无用符号的工作。
2009-7-26 552
6.2.1 去无用符号算法 6-1 删除派生不出终极符号行的变量。
输入,CFG G=(V,T,P,S)。
输出,CFG G′=(V′,T,P′,S),V′中不含派生不出终极符号行的变量,并且
L(G′)=L(G)。
主要步骤:
2009-7-26 553
6.2.1 去无用符号
(1) OLDV=Φ;
(2) NEWV={A|A?w∈ P且 w∈ T*};
(3) while OLDV≠NEWV do
begin
(4) OLDV=NEWV;
(5) NEWV=OLDV∪ {A|A?α∈ P
且 α∈ (T∪ OLDV)*}
end
(6) V′=NEWV;
(7) P′={ A?α|A?α∈ P且 A∈ V′且 α∈ (T∪ V′)*}
2009-7-26 554
6.2.1 去无用符号
第 (3)条语句控制对 NEWV进行迭代更新。
第一次循环将那些恰经过两步可以派生出终极符号行的变量放入 NEWV;第二次循环将那些恰经过三步和某些至少经过三步可以派生出终极符号行的变量放入 NEWV; ……,
第 n次循环将那些恰经过 n步和某些至少经过
n+1步可以派生出终极符号行的变量放入
NEWV。这个循环一直进行下去,直到所给文法 G中的所有可以派生出终极符号行的变量都被放入 NEWV中。
2009-7-26 555
6.2.1去无用符号定理 6-4 算法 6-1是正确的。
证明要点:首先证明对于任意 A∈ V,A被放入 V′中的充要条件是存在 w∈ T,A?n w。
再证所构造出的文法是等价的 。
(1)对 A被放入 NEWV的循环次数 n施归纳,证明必存在 w∈ T,满足 A?+ w。
2009-7-26 556
6.2.1去无用符号
(2)施归纳于派生步数 n,证明如果 A?n w,则
A被算法放入到 NEWV中 。 实际上,对原教材所给的证明进行分析,同时考虑算法 6-1
的实际运行,可以证明,A是在第 n次循环前被放入到 NEWV中的 。
(3)证明 L(G′)=L(G) 。 显然有 L(G′)?L(G),
所以只需证明 L(G)。
2009-7-26 557
6.2.1 去无用符号算法 6-2 删除不出现在任何句型中的语法符号。
输入,CFG G=(V,T,P,S)。
输出,CFG G′=(V′,T′,P′,S),V′∪ T′中的符号必在 G的某个句型中出现,并且有
L(G′)=L(G)。
主要步骤:
2009-7-26 558
6.2.1 去无用符号
主要步骤:
(1) OLDV=Φ;
(2) OLDT=Φ;
(3) NEWV={S}∪ {A|S?αAβ∈ P};
(4) NEWT={a|S?αaβ∈ P};
2009-7-26 559
6.2.1去无用符号
(5) while OLDV≠NEWV 或者 OLDT≠NEWT do
begin
(6) OLDV=NEWV;
(7) OLDT=NEWT;
(8) NEWV=OLDV∪ {B| A∈ OLDV且
A?αBβ∈ P 且 B∈ V};
(9) NEWT=OLDT∪ {a| A∈ OLDV且
A?αaβ∈ P 且 a∈ T};
end
2009-7-26 560
6.2.1去无用符号
(10) V′=NEWV;
(11) T′=NEWT;
(12) P′={ A?α| A?α∈ P且 A∈ V′且
α∈ (T′∪ V′)*}。
2009-7-26 561
6.2.1去无用符号定理 6-5 算法 6-2是正确的 。
证明要点:
(1) 施归纳于派生步数 n,证明如果 S?n αXβ,则当
X∈ V时,X在算法中被语句 (3)或者语句 (8)放入
NEWV;当 X∈ T时,它在算法中被语句 (4)或者语句 (9)放入 NEWT。
(2) 对循环次数 n施归纳,证明如果 X被放入 NEWT
或者 NEWV 中,则 必 定 存 在 α,
β∈ (NEWV∪ NEWT)*,使得 S?nαXβ。
(3) 证明 L(G′)=L(G) 。
2009-7-26 562
6.2.1去无用符号定理 6-6对于任意 CFL L,L≠Φ,则存在不含无用符号的 CFG G,使得 L(G)=L。
证明要点:
依次用算法 6-1和算法 6-2对文法进行处理,
可以得到等价的不含无用符号的文法。
不可先用算法 6-2后用算法 6-1。
2009-7-26 563
6.2.1去无用符号
例 6-2-1 设有如下文法
S?AB|a|BB,A?a,C?b|ABa
先用算法 6-2,文法被化简成:
S?AB|a|BB,A?a
再用算法 6-1,可得到文法:
S? a,A?a
显然,该文法中的变量 A是新的无用变量。
2009-7-26 564
6.2.2 去 ε-产生式
ε-产生式( ε-production)
– 形如 A?ε的产生式叫做 ε-产生式。
– ε-产生式 又称为 空产生式( null production。
可空 (nullable)变量
– 对于文法 G=(V,T,P,S)中的任意变量 A,如果 A?+ε,则称 A为 可空变量。
2009-7-26 565
6.2.2 去 ε-产生式
对形如 A?X1X2… Xm的产生式进行考察,
找出文法的可空变量集 U,然后对于?H?U,
从产生式 A?X1X2… Xm中删除 H中的变量 。
对于不同的 H,得到不同的 A产生式,用这组 A产生式替代产生式 A?X1X2… Xm。
必须避免在这个过程中产生新的 ε-产生式:
当 { X1,X2,…,Xm}?U时,不可将 X1,
X2,…,Xm同时从产生式 A?X1X2… Xm中删除 。
2009-7-26 566
6.2.2 去 ε-产生式算法 6-3求 CFG G的可空变量集 U。
输入,CFG G=(V,T,P,S)。
输出,G的可空变量集 U。
主要步骤:
(1) OLDU=Φ;
(2) NEWU={A| A?ε∈ P};
2009-7-26 567
6.2.2 去 ε-产生式
(3) while NEWU≠OLDUdo
begin
(4) OLDU = NEWU;
(5) NEWU= OLDU ∪ {A|A?α∈ P并且
α∈ OLDU*}
end
(6) U=NEWU
2009-7-26 568
6.2.2 去 ε-产生式定理 6-7 对于任意 CFG G,存在不含 ε-产生式的 CFG G′使得 L(G′)=L(G)-{ε}。
证明:
(1) 构造
设 CFG G=(V,T,P,S),
用 算法 6-3求出 G的可空变量集 U,
构造 P′。
2009-7-26 569
6.2.2 去 ε-产生式
对于?A?X1X2… Xm∈ P
将 A?α1α2… αm放入 P′,其中
if Xi∈ U then αi=Xi或者 αi=ε;
if Xi?U then αi=Xi
要求:在同一产生式中,α1,α2,…,αm不能同时为 ε。
2009-7-26 570
6.2.2 去 ε-产生式
证明对于任意 w∈ T+,A?nG w的充分必要条件是 A。
必要性:设 A?nG w,施归纳于 n,证明
A?mG′ w成立。
当 n=1时,由 A?G w知,A?w∈ P,按照定理所给的构造 G′的方法,必定有 A?w∈ P′。
所以,A?G′ w成立。
2009-7-26 571
6.2.2 去 ε-产生式
设 n≤k时结论成立 (k≥1),当 n=k+1时
A?X1X2… Xm
*G w1X2… Xm
*G w1w2… Xm
…
*G w1w2… wm
其中 w1w2…w m=w,且 w1,w2,……,wm∈ T*。
2009-7-26 572
6.2.2 去 ε-产生式注意到 w≠ε,必存在 1≤i≤m,wi≠ε,设 i,
j,…,k是 w1,w2,…,wm中所有非空串的下标,并且 1≤i≤j≤… ≤k≤m,即:
w= wiwj… wk
按照 G′的构造方法,A?XiXj…X k∈ P′
再由归纳假设,
Xi?*G′ wi,Xj?*G′ wj,…,Xk?*G′ wk。
2009-7-26 573
6.2.2 去 ε-产生式
A?*G′XiXj… Xk
*G′wiXj… Xk
*G′wiwj… Xk
…
*G′wiwj… wk
所以,结论对 n=k+1成立 。 由归纳法原理,
结论对所有的 n成立 。
2009-7-26 574
6.2.2 去 ε-产生式充分性:设 A?mG′ w,施归纳于 m,证明
A?nG w成立 。
当 m=1时,由 A?G′ w知,A?w∈ P′,按照定理所给的构造 G′的方法,必定有 A?α∈ P。
A?w是通过删除产生式 A?α右部中的可空变量而构造出来的,所以,
A?Gα?*G w 成立 。
2009-7-26 575
6.2.2 去 ε-产生式设 n≤k时结论成立 (k≥1),当 m=k+1时
A?*G′XiXj… Xk
*G′wiXj… Xk
*G′wiwj… Xk
…
*G′wiwj… wk=w
其中 Xi?*G′ wi,Xj?*G′ wj,…,Xk?*G′ wk 。
2009-7-26 576
6.2.2 去 ε-产生式表明 A? XiXj… Xk∈ P′。 按照 G′的构造方法,
必定存在 A?X1X2… Xm∈ P′,而且
{Xi,Xj,…,Xk}?{X1,X2,…,Xm}
{X1,X2,…,Xm}-{Xi,Xj,…,Xk}?U
从而,
A?G X1X2… Xm
*G XiXj… Xk
2009-7-26 577
6.2.2 去 ε-产生式再根据 Xi?*G′ wi,Xj?*G′ wj,…,Xk?*G′ wk和归纳假设,有
Xi?*G wi,Xj?*G wj,…,Xk?*G wk。
这表明,如下派生成立:
A?G X1X2… Xm
*G XiXj… Xk
*G wiXj… Xk
*G wiwj… Xk
…
*G wiwj… wk=w
2009-7-26 578
6.2.2 去 ε-产生式表明 结论对 m=k+1成立。由归纳法原理,结论对任意 m成立。
注意到 A 的任意性,当 S=A时结论成立 。 即:
S?*G w 的充分必要条件是 S?*G′ w
亦即,L(G′)=L(G)-{ε}。
定理得证。
2009-7-26 579
6.2.3 去单一产生式文法 Gexp1,E?E+T|E-T|T
T?T*F|T/F|F
F?F↑P|P
P?(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
存在派生:
E?T?F?P?id
2009-7-26 580
6.2.3 去单一产生式
Gexp3,E?E+T|E-T|T*F|T/F|F↑P|(E)|N(L)|id
T?T*F|T/F|F↑P| (E)|N(L)|id
F?F↑P|(E)|N(L)|id
P?(E)|N(L)|id
N?sin|cos|exp|abs|log|int
L?L,E|E
该文法中不存在类似的派生。
2009-7-26 581
6.2.3 去单一产生式
单一产生式 (unit production)
形如 A?B的产生式称为 单一产生式。
定理 6-8对于任意 CFG G,ε?L(G),存在等价的 CFG G1,G1不含无用符号,ε-产生式和单一产生式。
满足本定理的 CFG为 化简过的文法。
已有去无用符号和去 ε-产生式的结论,所以只讨论去单一产生式的问题。
2009-7-26 582
6.2.3 去单一产生式
证明要点:
( 1)构造 G2,满足 L(G2)=L(G),并且 G2中不含单一产生式。
用非单一产生式 A1?α取代 A1?*G An?α用到的产生式系列 A1?A2,A2?A3,…,An-
1?An,An?α。其中,A1?A2,
A2?A3,…,An-1?An都是单一产生式。
( n≥1)
2009-7-26 583
6.2.3 去单一产生式
( 2) 证明 L(G2)=L(G)。
用 A1?α所完成的派生 A1?α与产生式系列
A1?A2,A2?A3,……,An-1?An,An?α所完成的派生 A1?*G An?α相对应 。
在原文法中可能会出现一个变量在派生过程中循环出现的情况,在 w∈ L(G) 证明 w ∈ L(G2)
的过程中,要取 w在 G中的一个最短的最左派生 。
S=α0?Gα1?Gα2?G…?Gαn=w
2009-7-26 584
6.2.3 去单一产生式
( 3) 删除 G2中的无用符号。
由于在删除单一产生式后,文法中可能出现新的无用符号,因此,我们还需要再次删除新出现的无用符号。
此外,在去 ε-产生式后可能会产生新的单一产生式,也可能会引进新的无用符号。这是值得注意的。
2009-7-26 585
6.3 乔姆斯基范式
乔姆斯基范式文法 (Chomsky normal form,
CNF)简称为 Chomsky文法,或 Chomsky
范式。
CFG G=(V,T,P,S)中的产生式形式:
A?BC,A?a
其中,A,B,C∈ V,a∈ T。
CNF中,不允许有 ε-产生式、单一产生式。
2009-7-26 586
6.3 乔姆斯基范式
例 6-3-1 试将文法 Gexp4转换成等价的 GNF。
Gexp4,E?E+T| T*F|F↑P| (E)| id
T?T*F| F↑P| (E) |id
F?F↑P| (E) |id
P?(E) |id
可以分两步走
– 变成 A?a和 A?A1A2…A n的形式。
– 变成 CNF。
2009-7-26 587
第一步
E?EA+T| T A*F|F A↑P| A(EA5| id
T?TA*F| FA↑P| A(EA) |id
F?FA↑P| A(EA)|id
P?A(EA) |id
A+?+
A*?*
A↑?↑
A(?(
A)?)
2009-7-26 588
第二步
GexpCNF,E?EA1|
TA2
E?FA3| A(A4| id
T?TA2| FA3| A(A4 |id
F?FA3| A(A4|id
P?A(A4 |id
A+?+
A*?*
A↑?↑
A(?(
A)?)
A1?A+T
A2?A*F
A3?A↑P
A4?EA)
2009-7-26 589
6.3 乔姆斯基范式定理 6-9对于任意 CFG G,ε?L(G),存在等价的 CNF G2 。
证明要点:
1,构造 CNF
按照上述例子所描述的转换方法,在构造给定
CFG的 CNF时,可以分两步走。
假设 G为化简过的文法
构造 G1=(V1,T,P1,S) G1中的产生式都是形如
A?B1B2… Bm和 A?a的产生式,其中,A,B1,
B2,…,Bm∈ V1,a∈ T,m≥2
2009-7-26 590
6.3 乔姆斯基范式
构造 CNF G2=(V2,T,P2,S)。
m≥3时,引入新变量,B1,B2,…,Bm-2,
将 G1的形如 A?A1A2… Am的产生式替换成
A?A1B1
B1?A2B2
…
Bm-2?Am-1Am
2009-7-26 591
6.3 乔姆斯基范式
2,构造的正确性证明。
按照上述构造,证明被替换的产生式是等价的。
例如:在第二步中 {A?A1B1,
B1?A2B2,…,Bm-2?Am-1Am}与
A?A1A2… Am等价。
2009-7-26 592
6.3 乔姆斯基范式
例 6-6 试将下列文法转换成等价的 CNF。
S?bA | aB
A?bAA | aS | a
B?aBB | bS | b
2009-7-26 593
6.3 乔姆斯基范式
先引入变量 Ba,Bb和产生式 Ba?a,Bb?b,
完成第一步变换 。
S?BbA | BaB
A?BbAA | BaS | a
B?BaBB | BbS | b
Ba?a
Bb?b
2009-7-26 594
6.3 乔姆斯基范式
引入新变量 B1,B2
S?BbA | BaB
A?BbB1 | BaS | a
B?BaB2 | BbS | b
Ba?a
Bb?b
B1?AA
B2?BB
2009-7-26 595
6.3 乔姆斯基范式
不能因为原来有产生式 A?a和 B?b而放弃引进变量 Ba,Bb和产生式 Ba?a,Bb?b。
L(A)={x | x∈ {a,b}+ & x中 a的个数比 b的个数恰多 1个 }。
L(B)={x | x∈ {a,b}+ & x中 b的个数比 a的个数恰多 1个 }。
L(Ba)={ a }。
L(Bb)={ b }。
2009-7-26 596
6.4 格雷巴赫范式
格雷巴赫范式文法 (Greibach normal
form,GNF)简称为 Greibach文法,或
Greibach范式。
A?aα
其中,A∈ V,a∈ T,α∈ V* 。
在 GNF中,有如下两种形式的产生式
– A?a
– A?aA1A2…A m (m≥1)
2009-7-26 597
6.4 格雷巴赫范式
右线性文法是一种特殊的 GNF。
由于 GNF中不存 ε-产生式,所以对任意的
GNF G,ε?L(G)。
当 ε?L(G′)时,能够找到一个 GNF G,使得
L(G)=L(G′) 。
经过化简的 CFG,都有一个等价的 GNF。
2009-7-26 598
6.4 格雷巴赫范式引理 6-1 对于任意的 CFG G=(V,T,P,S),
A?αBβ∈ P,且 G中所有的 B产生式为
B?γ1 |γ2 |…|γ n
取 G1=( V,T,P1,S)
P1=(P-{A?αBβ})∪ {A?αγ1β,A?αγ2β,…,
A?αγnβ}
则,L(G1)=L(G)。
2009-7-26 599
6.4 格雷巴赫范式
证明以下两组产生式等价
– A?αBβ ; B?γ1 |γ2 |…|γ n
– { A?αγ1β,A?αγ2β,…,A?αγnβ}
2009-7-26 600
6.4 格雷巴赫范式
递归 (recursive)
如果 G中存在形如 A?nαAβ的派生,则称该派生是关于变量 A递归的,简称为递归派生。
当 n=1时,称该派生关于变量 A直接递归
(directly recursive),简称为直接递归派生。
形如 A?αAβ的产生式是变量 A的 直接递归的 (directly recursive)产生式。
2009-7-26 601
6.4 格雷巴赫范式
当 n≥2时,称该派生是关于变量 A的 间接递归 (indirectly recursive)派 生。简称为间接递归派生。
当 α=ε时,称相应的 (直接 /间接 )递归为 (直接
/间接 )左递归 (left-recursive);
当 β=ε时,称相应的 (直接 /间接 )递归为 (直接
/间接 )右递归 (right-recursive)。
2009-7-26 602
6.4 格雷巴赫范式
引理 6-2 对于任意的 CFG G=(V,T,P,
S),G中所有 A的产生式
A?β1|β2 |… |βm
A?β1B|β2 B |… |βm B
B?α1|α2 |… |αn
B?α1B|α2 B |… |αn B
可以被等价地替换为产生式组
A?Aα1 |Aα2 |… |Aαn
A?β1|β2 |… |βm
2009-7-26 603
6.4 格雷巴赫范式
证明要点:
用直接右递归取代原来的直接左递归。
两组产生式产生的符号串都是
121,,,,,hhhhk qq
前者是先产生然后产生 βk 。
121,,,,,hhhh qq
2009-7-26 604
6.4 格雷巴赫范式
后者先产生 βk 。
然后产生
121,,,,,hhhh qq
2009-7-26 605
6.4 格雷巴赫范式
121
21
1
.,,
.,,
.,,,,,
hhhhk
hhhk
hhk
hqk
B
B
BA
121
121
121
12
1
.,,
.,,
.,,
.,,,,,
hhhhk
hhhh
hhh
hh
h
q
A
A
A
AA
2009-7-26 606
6.4 格雷巴赫范式定理 6-10对于任意 CFG G,ε?L(G),存在等价的 GNF G1。
证明要点:
(1)使用引理 6-1将产生式都化成如下形式的产生式
A?A1A2… Am
A?aA1A2… Am-1
A?a
其中,A,A1,A2,…,Am∈ V1,a∈ T,m≥2。
2009-7-26 607
6.4 格雷巴赫范式
(2)根据引理 6-1和 6-2,将产生式变成如下形式的产生式
Ai?Ajα i≤j+1
Ai?aα
Bi?α
其中,V2=V1∪ { B1,B2,…,Bn},V1∩{ B1,
B2,…,Bn}=Φ。
,B类变量”,{ B1,B2,…,Bn}是在文法的改造过程中引入的新变量。
V1中的变量称为,A类变量”。
2009-7-26 608
6.4 格雷巴赫范式
( 3)根据引理 6-1,从编号较大的变量开始,
逐步替换,使所有产生式满足 GNF的要求:
1) for k=m-1 to 1 do
2) if Ak?Ak+1β∈ P2 then
3) for 所有的 Ak+1产生式 Ak+1?γ do
将产生式 Ak?γβ放入 P3;
4) for k= 1 to n do
5) 根据引理 6-1,用 P3中的产生式将所有的 Bk产生式替换成满足 GNF要求的形式 。
2009-7-26 609
6.5 自嵌套文法
自嵌套文法 (self-embedding grammar)
CFG G=(V,T,P,S)是化简后的文法,如果 G中存在有形如 A?+αAβ的派生,则称 G
为 自嵌套文法,其中 α,β∈ (V∪ T)+。
自嵌套的文法描述的语言可以是正则语言
例如:
S?0S0|1S1|0S1|1S0|0S|1S|0|1
2009-7-26 610
6.5 自嵌套文法定理 6-11 非自嵌套的文法产生的语言是正则语言。
证明要点,
( 1)将 G化成 GNF
( 2)取 RG G′=(V′,T,P′,[S]),其中
V′={[α]|α∈ V+并且 |α|≤m(n-2)+1}
P′={[Aα]?a[βα]|A?aβ∈ P并且 β∈ V*}
当 α=ε时,[α]=ε。
2009-7-26 611
6.6 小结本章讨论了 CFG的派生树,A子树,最左派生与最右派生,派生与派生树的关系,二义性文法与固有二义性语言,句子的自顶向下分析和自底向上分析;无用符号的消去算法,空产生式的消除,单一产生式的消除。 CFG的 CNF和 GNF;
CFG的自嵌套特性。
(1)S?*α的充分必要条件为 G有一棵结果为 α的派生树 。
(2)如果 α是 CFG G的一个句型,则 G中存在 α的最左派生和最右派生 。
2009-7-26 612
6.6 小结
(3)文法可能是二义性的,但语言只可能是固有二义性的,且这种语言是存在的 。
(4)对于任意 CFG G,ε?L(G),存在等价的 CFG
G1,G1不含无用符号,ε-产生式和单一产生式 。
(5)对于任意 CFG G,ε?L(G),存在等价的 CNF
G2。
(6)对于任意 CFG G,ε?L(G),存在等价的 GNF
G3。
(7)非自嵌套的文法产生的语言是正则语言 。
2009-7-26 613
第 7章下推自动机
PDA描述 CFL,所以它应该与 CFG等价。
PDA应该包含 FA的各个元素,或者包含那些可以取代 FA的各个元素的功能的元素。
PDA按照最左派生的派生顺序,处理处于当前句型最左边的变量,因此,需要采用栈作为其存储机构。
按照 FA的“习惯”,PDA用终态接受语言。
模拟 GNF的派生 PDA用空栈接受语言。
2009-7-26 614
第 7章下推自动机
主要内容
– PDA的基本概念 。
– PDA的构造举例 。
– 用终态接受语言和用空栈接受语言的等价性 。
– PDA是 CFL的接受器 。
重点
– PDA的基本定义及其构造,PDA是 CFL的等价描述 。
难点
– 根据 PDA构造 CFG。
2009-7-26 615
7.1 基本定义
PDA的物理模型
2009-7-26 616
7.1 基本定义
PDA应该 含有三个基本结构
– 存放输入符号串的输入带。
– 存放文法符号的栈。
– 有穷状态控制器。
PDA的动作
– 在有穷状态控制器的控制下根据它的当前状态、
栈顶符号、以及输入符号作出相应的动作,在有的时候,不需要考虑输入符号。
2009-7-26 617
7.1 基本定义
下推自动机 (pushdown automaton,PDA)
M= (Q,∑,Γ,δ,q0,Z0,F)
Q——状态的非空有穷集合 。q∈ Q,q称为
M的一个 状态 (state);
∑——输入字母表 (input alphabet)。 要求 M的输入字符串都是 ∑上的字符串;
Γ——栈符号表 (stack alphabet)。A∈ Γ,叫做一个栈符号;
2009-7-26 618
7.1 基本定义
Z0——Z0∈ Γ叫做 开始符号 (start symbol),
是 M启动时候栈内惟一的一个符号 。 所以,
习惯地称其为栈底符号;
q0——q0∈ Q,是 M的 开始状态 (initial state),
也可叫做 初始状态 或者 启动状态 ;
F——F?Q,是 M的 终止状态 (final state)集合,简称为终态集。q∈ F,q称为 M的终止状态,也可称为 接受状态 (accept state),
简称为终态。
2009-7-26 619
7.1 基本定义
δ——状态转移函数 (transition function),有时候又叫做 状态转换函数 或者 移动函数。
δ,Q× (∑∪ {ε})× Γ? *2Q
2009-7-26 620
7.1 基本定义
δ(q,a,Z)={(p1,γ1),(p2,γ2),…,
(pm,γm)}
表示 M在状态 q,栈顶符号为 Z时,读入字符 a,对于 i=1,2,…,m,可以选择地将状态变成 pi,并将栈顶符号 Z弹出,将 γi中的符号从右到左依次压入栈,然后将读头向右移动一个带方格而指向输入字符串的下一个字符。
2009-7-26 621
7.1 基本定义
δ(q,ε,Z)={(p1,γ1),(p2,γ2),…,
(pm,γm)}
表示 M进行一次 ε-移动 (空移动 ),即 M在状态 q,栈顶符号为 Z时,无论输入符号是什么,对于 i=1,2,…,m,可以选择地将状态变成 pi,并将栈顶符号 Z弹出,将 γi中的符号从右到左依次压入栈,读头不移动。
2009-7-26 622
7.1 基本定义
符号使用约定
英文字母表较为前面的小写字母,如 a,b,
c,…,表示输入符号;
英文字母表较为后面的小写字母,如 x,y,
z,…,表示由输入字符串;
英文字母表的大写字母,表示栈符号;
希腊字母 α,β,γ,…,表示栈符号串。
2009-7-26 623
7.1 基本定义
即时描述 (instantaneous description,ID)
(q,w,γ)∈ (Q,∑*,Γ*)称为 M的一个即时描述 。它表示 M处于状态 q,w是当前还未处理的输入字符串,而且 M正注视着 w
的首字符,栈中的符号串为 γ,γ的最左符号为栈顶符号,最右符号为栈底的符号,
较左的符号在栈的较上面,较右的符号在栈的较下面。
2009-7-26 624
7.1 基本定义如果 (p,γ)∈ δ(q,a,Z),a∈ ∑,则
(q,aw,Zβ)├M(p,w,γβ)
表示 M做一次非空移动,从 ID(q,aw,Zβ)变成 ID(p,w,γβ)。
如果 (p,γ)∈ δ(q,ε,Z),则
(q,w,Zβ)├M(p,w,γβ)
表示 M做一次空移动,从 ID(q,aw,Zβ)变成
ID(p,w,γβ)。
2009-7-26 625
7.1 基本定义
├Mn是 ├M 的 n次幂
– (q1,w1,β1)├Mn(qn,wn,βn)
├M*是 ├M 的克林闭包
– (q,w,α)├M*(p,x,β)
├M+是 ├M 的正闭包
– (q,w,α)├M+(p,x,β)
2009-7-26 626
7.1 基本定义
M接受的语言
–M用终态接受的语言
L(M)={w | (q0,w,Z0)├*(p,ε,β)且
p∈ F}
–M用空栈接受的语言
N(M) ={w | (q0,w,Z0)├*(p,ε,ε)}
2009-7-26 627
7.1 基本定义
例 7-1 考虑接受语言 L={w2wT | w∈ {0,1}*}
的 PDA的设计。
解法 1:
先设计产生 L的 CFG G1:
G1,S?2|0S0|1S1
再将此文法转化成 GNF:
G2,S?2|0SA|1SB
A?0
B?1
2009-7-26 628
7.1 基本定义
句子 0102010的最左派生和我们希望相应的 PDA M的动作。
派生 M应该完成的动作
S?0SA 从 q0启动,读入 0,将 S弹出栈,将 SA压入栈,状态不变
01SBA 在状态 q0,读入 1,将 S弹出栈,将 SB压入栈,状态不变
010SABA 在状态 q0,读入 0,将 S弹出栈,将 SA压入栈,状态不变
0102ABA 在状态 q0,读入 2,将 S弹出栈,将 ε压入栈,状态不变
01020BA 在状态 q0,读入 0,将 A弹出栈,将 ε压入栈,状态不变
010201A 在状态 q0,读入 1,将 B弹出栈,将 ε压入栈,状态不变
0102010 在状态 q0,读入 0,将 A弹出栈,将 ε压入栈,状态不变
2009-7-26 629
7.1 基本定义
M1=({q0},{0,1,2},{S,A,B},δ1,q0,
S,Φ)。 其中:
δ1(q0,0,S)={(q0,SA)}
δ1(q0,1,S)={(q0,SB)}
δ1(q0,2,S)={(q0,ε)}
δ1(q0,0,A)={(q0,ε)}
δ1(q0,1,B)={(q0,ε)}
此时有,N(M1)=L。
2009-7-26 630
7.1 基本定义
M2=({q0,q1},{0,1,2},{S,A,B,Z0},δ2,q0,Z0,{q1})
δ2(q0,0,Z0)={(q0,SAZ0)}
δ2(q0,1,Z0)={(q0,SBZ0)}
δ2(q0,2,Z0)={(q1,ε)}
δ2(q0,0,S)={(q0,SA)}
δ2(q0,1,S)={(q0,SB)}
δ2(q0,2,S)={(q0,ε)}
δ2(q0,0,A)={(q0,ε)}
δ2(q0,1,B)={(q0,ε)}
δ2(q0,ε,Z0)={(q1,ε)}
此时有,N(M2)=L(M2)=L。
2009-7-26 631
7.1 基本定义
解法 2:
注意到 L={w2wT|w∈ {0,1}*},所以 PDA M3
的工作可以分成两大阶段。
– 在读到字符 2之前,为“记载”阶段:每读到一个符号就在栈中做一次相应的记载。
– 在读到 2以后,再读到字符时,就应该进入
“匹配”阶段:由于栈的“先进后出”特性正好与 wT相对应,所以,用栈顶符号逐一地与输入字符匹配。
2009-7-26 632
7.1 基本定义
M3=({q0,q1,q2,qf,qt},{0,1,2},{ A,
B,Z0},δ3,q0,Z0,{qf})
q0为开始状态
q1为记录状态
q2为匹配状态
qf为终止状态
qt陷阱状态
2009-7-26 633
7.1 基本定义
δ3(q0,0,Z0)={(q1,AZ0)}
δ3(q0,1,Z0)={(q1,BZ0)}
δ3(q0,2,Z0)={(qf,ε)}
δ3(q1,0,A)={(q1,AA)}
δ3(q1,1,A)={(q1,BA)}
δ3(q1,0,B)={(q1,AB)}
δ3(q1,1,B)={(q1,BB)}
2009-7-26 634
7.1 基本定义
δ3(q1,2,A)={(q2,A)}
δ3(q1,2,B)={(q2,B)}
δ3(q2,0,A)={(q2,ε)}
δ3(q2,0,B)={(qt,ε)}
δ3(q2,1,B)={(q2,ε)}
δ3(q2,1,A)={(qt,ε)}
δ3(q2,ε,Z0)={(qf,ε)}
此时有,N(M3)=L(M3)=L。
2009-7-26 635
7.1 基本定义
不追求让 PDA同时用终止状态和空栈接受同样的语言,还可以删除状态 qf。这样我们可以得到 PDA M4 。
M4=({q0,q1,q2 },{0,1,2},{ A,B,
Z0},δ4,q0,Z0,Φ)
δ4(q0,0,Z0)={(q1,AZ0)}
δ4(q0,1,Z0)={(q1,BZ0)}
δ4(q0,2,Z0)={(q2,ε)}
2009-7-26 636
7.1 基本定义
δ4(q1,0,A)={(q1,AA)}
δ4(q1,1,A)={(q1,BA)}
δ4(q1,0,B)={(q1,AB)}
δ4(q1,1,B)={(q1,BB)}
δ4(q1,2,A)={(q2,A)}
δ4(q1,2,B)={(q2,B)}
δ4(q2,0,A)={(q2,ε)}
δ4(q2,1,B)={(q2,ε)}
2009-7-26 637
7.1 基本定义
确定的 (deterministic)PDA
(q,a,Z)∈ Q× ∑× Γ,|δ(q,
a,Z)|+|δ(q,ε,Z)|≤1
PDA在每一个状态 q和一个栈顶符号下的动作都是惟一的。
关键
– 对于?(q,Z)∈ Q× Γ,M此时如果有非空移动,
就不能有空移动。
– 每一种情况下的移动都是惟一的。
2009-7-26 638
7.1 基本定义
例 7-2 构造接受 L={wwT|w∈ {0,1}*}的 PDA。
差异
δ(q0,0,A)={(q0,AA),(q1,ε)}
0是 w中的 0或者是 wT的首字符 0;
δ(q0,1,B)={(q0,BB),(q1,ε)}
1是 w中的 1或者是 wT的首字符 1。
2009-7-26 639
7.2 PDA与 CFG等价
对于任意 PDA M1,存在 PDA M2,使得
L(M2)=N(M1);
对于任意 PDA M1,存在 PDA M2,使得 N
(M2)= L (M1)。
CFL可以用空栈接受语言的 PDA接受。
PDA接受语言可以用 CFG描述。
2009-7-26 640
7.2.1 PDA用空栈接受和用终止状态接受等价定理 7-1 对于任意 PDA M1,存在 PDA M2,
使得 N (M2)= L (M1)。
证明要点:
( 1) 构造 。
设 PDA M1 = (Q,∑,Γ,δ1,q01,Z01,F)
取 PDA M2 = (Q∪ {q02,qe},∑,Γ∪ {Z02},δ,
q02,Z02,F)
其中 Q∩{q02,qe}=Γ∩{Z02}=Φ。
2009-7-26 641
7.2.1 PDA用空栈接受和用终止状态接受等价
δ2(q02,ε,Z02)={(q01,Z01Z02)}
(q,a,Z)∈ Q× ∑× Γ,δ2(q,a,Z)=δ1(q,a,Z);
(q,Z)∈ (Q-F)× Γ,δ2(q,ε,Z)=δ1(q,ε,Z);
(q,Z)∈ F× Γ
δ2(q,ε,Z)=δ1(q,ε,Z)∪ {(qe,ε)};
q∈ F,δ2(q,ε,Z02)= {(qe,ε)};
Z∈ Γ∪ {Z02},δ2(qe,ε,Z)={(qe,ε)}
2009-7-26 642
7.2.1 PDA用空栈接受和用终止状态接受等价
( 2) 证明 N (M2)= L (M1)。
x∈ L(M1)
(q01,x,Z01)├M1*(q,ε,γ)且 q∈ F
(q01,x,Z01Z02)├M1*(q,ε,γZ02)且 q∈ F
(q01,x,Z01Z02)├M2*(q,ε,γZ02)且 q∈ F
2009-7-26 643
7.2.1 PDA用空栈接受和用终止状态接受等价
(q01,x,Z01Z02)├M2*(q,ε,γZ02)├M2*(qe,
ε,ε)且 q∈ F
(q01,x,Z01 Z02)├M2*(qe,ε,ε)
(q02,x,Z02)├M2(q01,x,Z01Z02)├M2*(qe,
ε,ε)
(q02,x,Z02)├M2*(qe,ε,ε)
x∈ N(M2)
2009-7-26 644
7.2.1 PDA用空栈接受和用终止状态接受等价定理 7-2 对于任意 PDA M1,存在 PDA M2,
使得 L (M2)= N (M1)。
证明要点:
(1)构造。
设 PDA M1 = (Q,∑,Γ,δ1,q01,Z01,Φ)
2009-7-26 645
7.2.1 PDA用空栈接受和用终止状态接受等价取 PDA M2 = (Q∪ {q02,qf},∑,Γ∪ {Z02},δ,
q02,Z02,{qf})
其中 Q∩{q02,qf}=Γ∩{Z02}=Φ。 δ2的定义如下,
δ2(q02,ε,Z02)={(q01,Z01Z02)}
对于?(q,a,Z)∈ Q× (∑∪ {ε})× Γ,δ2(q,a,
Z)=δ1(q,a,Z)。
δ2(q,ε,Z02)= {(qf,ε)}
2009-7-26 646
7.2.1 PDA用空栈接受和用终止状态接受等价
(2) 证明 L (M2)= N (M1)。
x∈ L(M2)
(q02,x,Z02)├M2*(qf,ε,ε)
(q02,x,Z02)├M2(q01,x,Z01Z02)
(q02,x,Z02)├M2(q01,x,Z01Z02)├M2*(qf,ε,ε)。
(q01,x,Z01Z02)├M2*(q,ε,Z02)且 (q,ε,
Z02)├M2*(qf,ε,ε)
(q01,x,Z01Z02)├M1*(q,ε,Z02)。
(q01,x,Z01)├M1*(q,ε,ε)。
x∈ N(M1)。
2009-7-26 647
7.2.2 PDA与 CFG等价定理 7-3 对于任意 CFL L,存在 PDA M,使得 N(M)=L。
证明要点:先考虑识别 L-{ε}的 PDA,然后再考虑对 ε的处理问题。
2009-7-26 648
7.2.2 PDA与 CFG等价
(1) 构造 PDA。
设 GNF G=(V,T,P,S),使得 L(G)=L- {ε}。
取 PDA M=({q},T,V,δ,q,S,Φ)
对于任意的 A∈ V,a∈ T,
δ(q,a,A)={(q,γ)|A?aγ∈ P}
也就是说,(q,γ) ∈ δ(q,a,A)的充分必要条件是 A?aγ∈ P。
2009-7-26 649
7.2.2 PDA与 CFG等价
(2) 证明构造的正确性,N(M)=L- {ε}。
施归纳于 w的长度 n,证明
(q,w,S)├Mn(q,ε,α)的充分必要条件为
S?nwα。
并且在假设结论对 n=k成立,而证明结论对 n=k+1成立时,取 w=xa,|x|=k,a∈ T。
在证明必要性时有如下过程,充分性的证明过程是倒退回来。
2009-7-26 650
7.2.2 PDA与 CFG等价
(q,w,S)=(q,xa,S)├Mk(q,a,γ)├M(q,ε,α)
此时必定存在 A∈ V,γ=Aβ1,(q,β2)∈ δ(q,a,A)。
(q,a,γ)=(q,a,Aβ1)├M(q,ε,β2β1)=(q,ε,α)。
由 (q,β2)∈ δ(q,a,A)就可以得到 A?aβ2∈ P,再由归纳假设,得到
S?kxAβ1。
合起来就有
S?kx Aβ1?xaβ2β1。
2009-7-26 651
7.2.2 PDA与 CFG等价
(3)考虑 ε∈ L的情况。
先按照 (1)的构造方法构造出 PDA
M=({q},T,V,δ,q,S,Φ)
使得 N(M)=L-{ε}。 然后取
M1=({q,q0},T,V∪ {Z},δ1,q0,Z,Φ)
其中,q0≠q,Z?V,令
δ1(q0,ε,Z)={(q0,ε),(q,Z0)},
对于?(a,A)∈ T× V
δ1(q,a,A)=δ(q,a,A)
2009-7-26 652
7.2.2 PDA与 CFG等价定理 7-4 对于任意的 PDA M,存在 CFG G使得 L(G)=N(M)。
证明要点:
(1) 构造对应 (q1,A1A2… An)∈ δ(q,a,A)难以用产生式 [q,A]?a[q1,A1A2… An]模拟。
同样也难以用 [q,A]?a[q1,A1] [q2,
A2]… [qn,An]模拟。
2009-7-26 653
7.2.2 PDA与 CFG等价
PDA的移动 (q1,A1A2…A n)∈ δ(q,a,A)需要用如下形式的产生式模拟。
– [q,A,qn+1]?a[q1,A1,q2] [q2,A2,q3] …
[qn,An,qn+1]
– q2,…,qn是分别对应 PDA恰“处理完” A1进而处理 A2,…,恰“处理完” An-1进而处理 An
的状态。当然就有了恰“处理完” An而进入的状态 qn+1,这个状态就是“处理完” A后其次栈顶变为栈顶的状态。
2009-7-26 654
7.2.2 PDA与 CFG等价取 CFG G= (V,∑,P,S),其中:
V={S}∪ Q× Γ× Q
P={S?[q0,Z0,q]|q∈ Q}∪
∪ {[q,A,qn+1]?a[q1,A1,q2] [q2,A2,
q3]… [qn,An,qn+1] | (q1,A1A2… An)∈ δ(q,
a,A)且 a∈ ∑∪ {ε},q2,q3,…,qn、
qn+1∈ Q且 n≥1}∪
∪ {[q,A,q1]?a|(q1,ε)∈ δ(q,a,A)}
2009-7-26 655
7.2.2 PDA与 CFG等价
(2) 构造的正确性。
先证一个更一般的结论,[q,A,p]?*x的充分必要条件是 (q,x,A)├(p,ε,ε),然后根据这个一般的结论得到 q=q0,A=S时的特殊结论 ——构造的正确性。
必要性:设 [q,A,p]?i x,施归纳于 i,
证明 (q,x,A)├*(p,ε,ε)
充分性:设 (q,x,A)├i(p,ε,ε)成立,施归纳于 i证明 [q,A,p]?*X 。
2009-7-26 656
7.3 小结
PDA M是一个七元组,M= (Q,∑,Γ,δ,
q0,Z0,F)
它是 CFL的识别模型,它比 FA多了栈符号,
这些符号和状态一起用来记录相关的语法信息。
在决定移动时,它将栈顶符号作为考虑的因素之一。
2009-7-26 657
7.3 小结
PDA可以用终态接受语言,也可以用空栈接受语言。
与 DFA不同,?(q,a,Z)∈ Q× ∑× Γ,
DPDA仅要求 |δ(q,a,Z)|+|δ(q,ε,Z)|≤1
2009-7-26 658
7.3 小结
关于 CFG和 PDA主要有如下结论:
(1) 对于任意 PDA M1,存在 PDA M2,使得 N (M2)= L (M1);
(2) 对于任意 PDA M1,存在 PDA M2,使得 L (M2)= N (M1);
(3) 对于任意 CFL L,存在 PDA M,使得
N(M)=L;
(4) 对于任意的 PDA M,存在 CFG G使得
L(G)=N(M)。
2009-7-26 659
第 8章 CFL的性质
本章讨论 CFL的性质
主要内容
– CFL的泵引理及其应用,Ogden引理。
– CFL的封闭性
封闭运算:并、乘、闭包、代换、同态映射、
逆同态映射
不封闭运算:交、补
2009-7-26 660
第 8章 上下文无关语言的性质
CFL的判定算法。
– 判定 CFG产生的语言是否为空、有穷、无穷。
– 一个给定的符号串是否为该文法产生的语言的一个句子等问题。
重点
– CFL的封闭性,CFL的泵引理 。
难点
– CFL的泵引理的应用,CFL的同态原象是 CFL。
2009-7-26 661
8.1 上下文无关语言的泵引理
启发
RG G=(V,T,P,S),使得 L(G)=L,当 x
足够长时,如 |x|≥|V|+1时,存在 u,v、
w∈ T*,|v|≥1,使得 x=uvw,当 G为右线性文法时,必定存在语法变量 A,使得如下派生成立:
S?* uA?* uvA?* ……?* uviA?* uviw
V是可以被重复任意多次的字串!
CFL也有类似性质?
2009-7-26 662
8.1 上下文无关语言的泵引理
CFL的自嵌套特性:如果 L是一个 CFL,
CFG G=(V,T,P,S)是产生 L的文法 。 当
L是一个无穷语言时,必存在 w∈ L,A∈ V,
α,β∈ (V∪ T)*,且 α和 β中至少有一个不为
ε,使得如下派生成立 S?*
γAδ?+γαAβδ?+z
文法 G中存在有如下形式的派生
A?+αAβ
2009-7-26 663
8.1 上下文无关语言的泵引理
这种类型的派生预示着
S?* γAδ?+γαAβδ?+ z
并且
S?* γAδ?+γαnAβnδ?+z′
设 α?* v,β?* x,γ?* u,A?* w,δ?*
y
可以得到如下派生
2009-7-26 664
8.1 上下文无关语言的泵引理
S?* γAδ
* uαAβδ
* uαAβy
…
*uαnAβn y
* uvnAxny
* uvnwxny
2009-7-26 665
8.1 上下文无关语言的泵引理引理 8-1 ( CFL的泵引理) 对于任意的 CFL
L,存在仅仅依赖于 L的正整数 N,对于任意的 z∈ L,当 |z|≥N时,存在 u,v,w,x,
y,使得 z=uvwxy,同时满足:
(1) |vwx|≤N;
(2) |vx|≥1;
(3) 对于任意的非负整数 i,uviwxiy∈ L。
2009-7-26 666
8.1 上下文无关语言的泵引理
2009-7-26 667
8.1 上下文无关语言的泵引理
证明要点:
( 1) 用 CNF作为 CFL的描述工具 。
( 2) 对于任意的 z∈ L,当 k是 z的语法树的最大路长时,必有 |z|≤2k-1成立 。
( 3) 仅当 z的语法树呈图 8-1所示的满二元树时,才有 |z|=2k-1,其他时候均有 |z|<2k-1。
( 4) 取 N=2|V|=2|V|+1-1,z∈ L,|z|≥N。
2009-7-26 668
8.1 上下文无关语言的泵引理
2009-7-26 669
8.1 上下文无关语言的泵引理
( 5) 取 z的语法树中的最长的一条路 p,p中的非叶子结点中必定有不同的结点标有相同的语法变量 。
( 6) p中最接近叶子且都标有相同的语法变量 A的两个结点为 v1,v2,如图 8-2所示 。
2009-7-26 670
8.1 上下文无关语言的泵引理
结点 v1左边的所有叶子结点的标记从左到右构成的字符串为 u;
结点 v1的为根的子树中,v2左边的所有叶子结点的标记从左到右构成的字符串为 v;
结点 v2为根的子树的结果为 w;
结点 v1为根的子树中 v2右边的所有叶子结点的标记从左到右构成的字符串为 x;
结点 v1右边的所有叶子结点的标记从左到右构成的字符串为 y。
2009-7-26 671
8.1 上下文无关语言的泵引理
z=uvwxy
注意到 v1-子树的最大路长小于等于 |V|+1,所以,
v1的结果 vwx满足,|vwx|≤2(|V|+1)-1=2|V|=N
v1的后代 v2标记为变量 A,所以,|vx|≥1。
此时有
S?* uAy?+ uvAxy?+ uvwxy
显然,对于 i=0,1,2,3,…
A?* viAxi?+ viwxi
2009-7-26 672
8.1 上下文无关语言的泵引理
总结上述推导
( 7) S?* uAy?+ uvAxy?+ uvwxy=z,
|vwx|≤2(|V|+1)-1=2|V|=N,|vx|≥1。
( 8)对于任意非负整数 i,S?* uAy?+
uviAxiy?+ uviwxiy。
2009-7-26 673
8.1 上下文无关语言的泵引理
例 8-1 证明 L={anbncn|n≥1}不是 CFL。
证明:
取 z=aNbNcN∈ L
⑴ v=ah,x=bf,h+f≥1。
uviwxiy=aN+(i-1)hbN+(i-1)fcN,
– 当 i≠1时,N+(i-1)h≠N和 N+(i-1)f≠N中至少有一个成立。
– uviwxiy=aN+(i-1)hbN+(i-1)fcN?L。
2009-7-26 674
8.1 上下文无关语言的泵引理
⑵ v=bh,x=cf,h+f≥1。
uviwxiy=aNbN+(i-1)h cN+(i-1)f
– 当 i≠1时,N+(i-1)h≠N和 N+(i-1)f≠N中至少有一个成立 。
– uviwxiy=aNhbN+(i-1)cN+(i-1)f?L。
这些都与泵引理矛盾,所以,L不是 CFL。
2009-7-26 675
8.1 上下文无关语言的泵引理
例 8-2 证明 L={anbmcndm|n,m≥1}不是 CFL。
证明:
取 z= aNbNcNdN
v=ah,x=bf; v=bh,x=cf; v=ch,x=df,
h+f≥1等 4种情况。
2009-7-26 676
8.1 上下文无关语言的泵引理
设 v=ah,x=bf,并且 h+f≥1
uviwxiy=aN+(i-1)hbN+(i-1)fcNdN
当 i≠1时,N+(i-1)h≠N和 N+(i-1)f≠N至少有一个成立 。
uviwxiy=aN+(i-1)hbN+(i-1)fcNdN?L
2009-7-26 677
8.1 上下文无关语言的泵引理
同理可以证明,当 v=bh,x=cf或者 v=ch、
x=df,h+f≥1时,
uviwxiy=aN+(i-1)hbN+(i-1)fcNdN?L
对 i≠1成立。
由泵引理,L不是 CFL。
2009-7-26 678
8.1 上下文无关语言的泵引理
L={anbmck|n≠m,m≠k,k≠n} 是 CFL么?
取 z=aNbN+ncN+m其中,n≠m,n≠0,m≠0。
只能让 v或者 x由若干个 a组成,才有可能随着 i的变化,使得 uviwxiy中 a的个数与 b的个数或者 c的个数相同。
当 v=ak,x=bh( N≥k≥1),显然,只要令 k=h,就能保证对于任意的 i,uviwxiy中字符 a的个数永远不能等于字符 b的个数。
希望 uviwxiy中字符 a的个数等于字符 c的个数 。
2009-7-26 679
8.1 上下文无关语言的泵引理
想办法保证在 N≥k≥1的条件下,总能找到一个 i,使得 uviwxiy中字符 a的个数能够等于 c
的个数。
在 uviwxiy中,字符 a的个数为 N+(i-1)k,而 c
的个数为 N+m,即,N+(i-1)k=N+m。
从而要求,无论 k取 N到 1的任何一个值,
i=m/k+1必须是一个整数 。
2009-7-26 680
8.1 上下文无关语言的泵引理
取 z=aNbN+N!cN+2N!
v=ak,x=bh,N≥k≥1
当 i= 2N!/k+1时,有
uviwxiy=aN+(i-1)kbN+N!+(i-1)hcN+2N!
= aN+(2N!/k+1-1)kbN+N!+(2N!/k+1-1)hcN+2N!
= aN+(2N!/k)kbN+N!+(2N!/k)hcN+2N!
= aN+2N!bN+N!+(2N!/k)hcN+2N!
uviwxiy= aN+2N!bN+N!+(2N!/k)hcN+2N!?L。
2009-7-26 681
8.1 上下文无关语言的泵引理
问题:当取 v=bk,x=ch,N≥k≥1,时,我们就无法在找到矛盾了。
我们必须把目标锁定在 a上!
因为这能保证找出“矛盾”!
所以我们实在是对 a太“感兴趣”了!
称这些令我们感兴趣的字符为 特异点
(distinguished position)。
2009-7-26 682
8.1 上下文无关语言的泵引理
?是否可以要求 v和 x中必须含有 a。
这样必须修改原有的泵引理!
定义 z的语法树满足下列条件的非叶子结点为 分支点 (branch point):该结点有两个儿子,并且它的这两个儿子均有特异点后代。
2009-7-26 683
8.1 上下文无关语言的泵引理引理 8-2 ( Ogden引理) 对于任意的 CFL L,
存在仅仅依赖于 L的正整数 N,对于任意的
z∈ L,当 z中至少含有 N个特异点时,存在 u,
v,w,x,y,使得 z=uvwxy,同时满足,
(1) |vwx|中特异点的个数 ≤N;
(2) |vx|中特异点的个数 ≥1;
(3) 对于任意的非负整数 i,uviwxiy∈ L。
2009-7-26 684
8.1 上下文无关语言的泵引理
证明要点:
( 1) 与 CFL的泵引理的证明类似。
( 2) 用 CNF作为 CFL的描述工具。
( 3) 取 N= 2|V|+1。
( 4) 构造从树根到叶子的含有最多分支点的路径 p。参考图 8-2。
2009-7-26 685
8.1 上下文无关语言的泵引理图 8-2 z的派生树
2009-7-26 686
8.1 上下文无关语言的泵引理其中:
结点 v1左边的所有叶子结点的标记从左到右构成的字符串为 u;
结点 v1的为根的子树中 v2左边的所有叶子结点的标记从左到右构成的字符串为 v;
结点 v2为根的子树的结果为 w;
结点 v1的为根的子树中 v2右边的所有叶子结点的标记从左到右构成的字符串为 x;
结点 v1右边的所有叶子结点的标记从左到右构成的字符串为 y;
2009-7-26 687
8.1 上下文无关语言的泵引理
( 5) p中至少有 |V|+1个分支点,在这些分支结点中,至少有两个不同的结点标记有相同的变量 A。
( 6) 仍然参照图 8-2,p中最接近叶子的且都标有相同的语法变量 A的两个分支结点为 v1,v2。
( 7) S?* uAy?+ uvAxy?+ uvwxy=z。 vwx
中最多有 N个特异点,vx至少有 1个特异点 。
( 8) 对于任意的非负整数 i,S?* uAy?+
uviAxiy?+uviwxiy。
2009-7-26 688
8.1 上下文无关语言的泵引理
例 8-3证明 L={anbmchdj|n=0或者 m=h=j}不是 CFL。
取 z=abNcNdN
⑴ v=a,x=bk,k≠0
此时 uv2wx2y=aabN+kcNdN?L;
⑵ v=bk,x=cg,k≠0,g≠0
此时 uv2wx2y=abN+kcN+gdN?L;
⑶ v=bk,x=dg,k≠0,g≠0
此时 uv2wx2y=aabN+kcNdN+g?L;
与 Ogden引理矛盾,所以,L不是 CFL。
2009-7-26 689
8.2 CFL的封闭性定理 8-1 CFL 在并、乘积、闭包运算下是封闭的。
证明要点:
令 CFG
–G1=(V1,T1,P1,S1),L(G1)=L1,
–G2=(V2,T2,P2,S2),L(G2)=L2,
–V1∩V2=Φ,且 S3,S4,S5?V1∪ V2。
2009-7-26 690
8.2 CFL的封闭性
G3=(V1∪ V2∪ {S3},T1∪ T2,P1∪ P2∪ { S3?S1|S2},S3)
G4=(V1∪ V2∪ {S4},T1∪ T2,P1∪ P2∪ { S4?S1S2},S4)
G5=(V1∪ {S5},T1,P1∪ { S5?S1S5|ε},S5)
显然,G3,G4,G5都是 CFG,并且
L(G3)=L1∪ L2
L(G4)= L1L2
L(G5)= L1*
2009-7-26 691
8.2 CFL的封闭性定理 8-2 CFL 在交运算下不封闭的。
证明要点:
设 L1={0n1n2m|n,m≥1},L2={0n1m2m|n,m≥1}。
G1,S1?AB
A?0A1|01
B?2B|2
G2,S?AB
A?0A|0
B?1B2|12
2009-7-26 692
8.2 CFL的封闭性
显然,L(G1)=L1,L(G2)=L2 。
L= L1∩L2={0n1n2n|n≥1}不是 CFL。
所以,CFL在交运算下是不封闭的。
2009-7-26 693
8.2 CFL的封闭性推论 8-1 CFL在补运算下是不封闭的。
证明要点:
由于 CFL对并运算的封闭性、对交运算的不封闭性和下列式子,可以得出 CFL对补运算是不封闭的结论。
212121 LLLLLL
2009-7-26 694
8.2 CFL的封闭性定理 8-3 CFL与 RL的交是 CFL。
证明:
( 1)构造设 PDA M1=(Q1,∑,Γ,δ1,q01,Z0,F1)
L1=L(M1)
DFA M2=(Q2,∑,δ2,q02,F2)
L2=L(M2)
2009-7-26 695
8.2 CFL的封闭性
取 PDA M=(Q1× Q2,∑,Γ,δ,[q01,q02],
Z0,F1× F2)
对?([q,p],a,Z)∈ (Q1× Q2)× (∑∪ {ε})× Γ
δ([q,p],a,Z)={([q′,p′],γ) | (q′,
γ)∈ δ1(q,a,Z) 且 p′=δ(p,a)}
可以用下图标是构造的基本思想。
2009-7-26 696
8.2 CFL的封闭性
2009-7-26 697
8.2 CFL的封闭性
① M使用的栈就是 M1的栈。
② M的状态包括两个分量:一个为 M1的状态,
用来使 M的动作能准确地模拟 M1的动作;
另一个为 M2的状态,用来使 M的动作能准确地模拟 M1的动作。
③ 当 M1执行 ε-移动时,M2不执行动作。
2009-7-26 698
8.2 CFL的封闭性
(2) 证明构造的正确性。
施归纳于 n证明:
([q01,q02],w,Z0) ├Mn ([q,p],ε,γ)
(q01,w,Z0) ├M1n (q,ε,γ) &δ(q02,w) =p
再注意到 [q,p]∈ F1× F2?q∈ F1 & p∈ F2
这就是说,对于?x∈ ∑*,
x∈ L(M)? x∈ L(M1) & x∈ L(M2)
所以,
L(M)=L(M1)∩L(M2)
2009-7-26 699
8.2 CFL的封闭性
根据本定理证明中给出的方法,可以用 N个正则语言 L1,L2,…,LN的识别器 (DFA)的有穷状态控制器构成这 N个正则语言的交的识别器 (DFA):
M∩=(Q1× Q2× … × QN,∑,δ,[q10,
q20,…,qN0],F1× F2× … × FN)
2009-7-26 700
8.2 CFL的封闭性定理 8-4 CFL在代换下是封闭的 。
① CFG G=(V,T,P,S),使得 L=L(G)。对于?a∈ T,f(a)是 ∑上的 CFL,且 CFG
Ga=(Va,∑,Pa,Sa),使得 f(a)=L(Ga)。
② f(a)的所有句子都是由 Sa派生出来的,所以,
构造的基本思想是用 Sa替换产生 L的 CFG的产生式中出现的终极符号 a。
2009-7-26 701
8.2 CFL的封闭性
③ 产生 f(L)的文法
),',,(' SPPVVG
Ta
a
Ta
a?
},,
|{'
21
21
iXiiii
n
n
SAXAVX
PXXXA
AAAAP
否则则如果且?
2009-7-26 702
8.2 CFL的封闭性
④ 证明 L(G′)=f(L)
设 x∈ L(G′),从而
S?*G′SaSb… Sc
+G′xaSb… Sc
+G′xaxb… Sc
…
+G′xaxb… xc
=x
Sa,Sb,…,Sc∈ {Sd |
d∈ T}。 且
Sa?*G′ xa
Sb?*G′ xb
…
Sc?*G′ xc
2009-7-26 703
8.2 CFL的封闭性由 G′的定义知,
S?*G′SaSb… Sc? S?*G ab… c
并且,对于?d∈ T,Sd?*G′ xd? Sd?*Gd xd
所以,ab… c∈ L,xa∈ L(Ga),xb∈ L(Gb),…,
xc∈ L(Gc)
故,x= xaxb… xc=f(a)f(b)… f(c)=f(ab… c)
即,x∈ f(L)。 从而 L(G′)?f(L)
用类似的方法,不难证明 f(L)?L(G′)。
综上所述,定理得证 。
2009-7-26 704
8.2 CFL的封闭性推论 8-2 CFL的同态像是 CFL。
注意到对任意的 CFG G=(V,T,P,S),
L=L(G)。对于?a∈ T,|f(a)|=1,所以它是
∑上的 CFL,根据这个定理,得到此推论。
2009-7-26 705
8.2 CFL的封闭性定理 8-5 CFL L的同态原像是 CFL。
基本思路:
① 描述工具 PDA。
② PDA M2=(Q2,∑2,Γ,δ2,q0,Z0,F)接受
L
③ 设 T={ a1,a2,…,an}根据 f(a1)=x1,
f(a2)=x2,…,f(an)=xn,M1有穷控制器中的缓冲区存放 f(a1),f(a2),…,f(an)的任一后缀。
2009-7-26 706
8.2 CFL的封闭性
④ 对于任意的 x∈ ∑1*,设 x=b1b2… bn,M1是否接受
x,完全依据于 M2是否接受 f(b1)f(b2)… f(bn)。
⑤ M1的形式定义为
M1=(Q1,∑1,Γ,δ1,[q0,ε],Z0,F× {ε})
Q1={[q,x] | q∈ Q2,存在 a∈ ∑1,x是 f(a)的后缀 }
当 M1扫描到 a∈ ∑1时,将 f(a)存入有穷控制器,
([q,f(a)],A) ∈ δ1([q,ε],a,A)
2009-7-26 707
8.2 CFL的封闭性然后,M1模拟 M2处理存在缓冲区中的 f(a)。
M1用 ε-移动模拟 M2的非 ε-移动:
(p,γ)∈ δ2(q,a,A),?
([p,x],γ)∈ δ1([q,ax],ε,A)
M1用 ε-移动模拟 M2的 ε-移动
(p,γ)∈ δ2(q,ε,A),?
([p,x],γ)∈ δ1([q,x],ε,A)
2009-7-26 708
图 8-4 M的构造示意图
2009-7-26 709
8.2 CFL的封闭性
构造的正确性证明。
证明 x=a1a2…a n∈ L(M1)的充分必要条件是
f(a1)f(a2)…f(a n) ∈ L(M2),这里的关键是对状态“接续”的理解。也就是
2009-7-26 710
8.2 CFL的封闭性成立的充分必要条件为:
([qi,ε],ai…a n,γi) ├M1 ([qi,f(ai)],ai+1…a n,γi)
([qi,f(ai)],ai+1…a n,γi) ├M1* ([qi+1,ε],ai…a n,γi+1)
(q0,f(a1)f(a2)… f(an),Z0)├M2* (q1,f(a2)… f(an),γ1)
(qi,f(ai)…f(a n),γi) ├M2* (qi+1,f(ai+1)…f(a n ),γi+1)
2009-7-26 711
8.3 CFL的判定算法
不存在判断算法的问题:
① CFG G,是不是二义性的?
② CFL L的补是否确实不是 CFL?
③ 任意两个给定 CFG是等价的么?
存在判断算法的问题:
④ L是非空语言么?
⑤ L是有穷的么?
⑥ 一个给定的字符串 x是 L的句子么?
2009-7-26 712
8.3.1 L空否的判定
基本思想:
设 L为一个 CFL,则存在 CFG G,使得 L(G)=L。由算法 6-1,我们可以求出等价的 CFG G′,G′中不含派生不出终极符号行的变量。显然,如果 NEWV中包含 G的开始符号,则 L就是非空的。否则,L就是空的。因此,通过改造算法 6-1,我们可得到判定 L是否为空的算法 8-1。
2009-7-26 713
8.3.1 L空否的判定算法 8-1 判定 CFL L是否为空 。
输入,CFG G=(V,T,P,S)。
输出,G是否为空的判定; CFG G′=(V′,T,
P′,S),V′中不含派生不出终极符号行的变量,并且有 L(G′)=L(G)。
主要步骤:
(1) OLDV=Φ;
(2) NEWV={A|A?w∈ P且 w∈ T*}
2009-7-26 714
8.3.1 L空否的判定
(3) while OLDV≠NEWV do
begin
(4) OLDV=NEWV;
(5) NEWV=OLDV∪ {A?α∈ P且
α∈ (T∪ OLDV) *};
end
(6) V′=NEWV;
(7) P′={ A?α| A?α∈ P且 A∈ V′且
α∈ (T∪ V′)*};
(8) if S∈ NEWV then L(G)非空 else L(G)为空
2009-7-26 715
8.3.2 L是否有穷的判定
可派生性图表示 (Derivability Graph of G——DG)
设 CFG G=(V,T,P,S),G的 可派生性图表示 是满足下列条件的有向图:
(1) 对于?X∈ V∪ T,图中有且仅有一个标记为 X
的顶点;
(2) 如果 A?X1X2… Xn∈ P,则图中存在从标记为 A
的顶点分别到标记为 X1,X2,…,Xn的弧;
(3) 图中只有满足条件 1和 2的顶点和弧 。
2009-7-26 716
8.3.2 L是否有穷的判定
G的可派生性图表示中,任意两个顶点之间最多有一条相同方向的弧。
G的可派生性图表示表达了文法 G中的语法变量之间的派生关系。
派生 A?+αAβ存在的充分必要条件是 G的可派生性图表示中存在一条从标记为 A的顶点到标记为 A的顶点的长度非 0的有向回路。
2009-7-26 717
8.3.2 L是否有穷的判定定理 8-6 设 CFG G=(V,T,P,S)不含无用符号,L(G)为无穷语言的充分必要条件是 G的可派生性图表示中存在一条有向回路。
证明要点:
对应某一条有向回路,寻找一条从 S出发,到达此回路的路,可以构造出下列形式的派生
S?+γAρ?+γαAβρ
从而对任意的非负整数 i,
S?+γAρ?+γαiAβiρ
2009-7-26 718
8.3.2 L是否有穷的判定
DG中标记为终极符号的结点是无用的
简化的可派生性图表示 (simplified
derivability graph of G,SDG )
设 CFG G=(V,T,P,S),G的 简化的可派生性图表示 是从 G的可派生性图表示中删除所有标记为终极符号的顶点后得到的图 。
2009-7-26 719
8.3.2 L是否有穷的判定定理 8-7 设 CFG G=(V,T,P,S)不含无用符号,L(G)为无穷语言的充分必要条件是 G
的简化的可派生性图表示中存在一条有向回路 。
证明:与定理 8-6的证明类似。
2009-7-26 720
8.3.2 L是否有穷的判定算法 8-2 判定 CFL L是否为无穷语言 。
输入,CFG G=(V,T,P,S)。
输出,G是否为无穷的判定; CFG G′=(V′,
T,P′,S),V′中不含派生不出终极符号行的变量,并且有 L(G′)=L(G)。
2009-7-26 721
8.3.2 L是否有穷的判定
(1) 调用算法 6-1,6-2;
(2) if S?V′ then L(G)为有穷的语言
else
begin
(3) 构造 G′的简化的可派生性图表示 SDG;
(4) if SDG中含有回路 then L(G′)为无穷语言
(5) else L(G′)为有穷有语言 。
end
2009-7-26 722
8.3.3 x是否为 L的句子的判定
判断 x是否为给定文法生成的句子的根本方法是看
G能否派生出 x。一种最简单的算法是用穷举法,
这种方法又称为“试错法”,是“带回溯”的,所以效率不高。其时间复杂度为串长的指数函数。
典型的自顶向下的分析方法:递归子程序法、
LL(1)分析法、状态矩阵法等。
典型的自底向上的分析方法,LR分析法、算符优先分析法。
这些基本的方法均只可以分析 CFG的一个真子类。
2009-7-26 723
8.3.3 x是否为 L的句子的判定
CYK算法的基本思想是从 1到 |x|,找出 x的相应长度的子串的派生变量,效率较高的根本原因是它在求 x的长度为 i的子串 y的
“派生变量”时,是根据相应的 CNF中的形如 A?BC的产生式,使用已经求出的 B是
y的前缀的“派生变量”,而 C是相应的后缀的“派生变量”的结果。
2009-7-26 724
8.3.3 x是否为 L的句子的判定算法 8-3 CYK算法。
输入,CNF G=(V,T,P,S),x;
输出,x∈ L(G)或者 x?L(G);
主要数据结构:
– 集合 Vi,j——可以派生出子串 xi,k的变量的集合。
这里,xi,k表示 x的从第 i个字符开始的,长度为
k的字串。
2009-7-26 725
8.3.3 x是否为 L的句子的判定
(1) for i=1 to |x| do
(2) Vi,1={A|A?xi,1∈ P};
(3) for k=2 to |x| do
(4) for i=1 to |x|-k+1 do
begin
(5) Vi,k=Φ;
(6) for j=1 to k-1 do
(7) Vi,k= Vi,k∪ {A | A?BC∈ P且 B∈ Vi,j且
C∈ Vi+j,k-j};
end
2009-7-26 726
8.3.3 x是否为 L的句子的判定其中:语句 (1)和 (2)完成长度为 1的子串的派生变量的计算。其时间复杂度为 |P|。语句 (3)控制算法依次完成长度是 2,3,…,|x|的子串的派生变量的计算;语句 (4)控制完成对于串 x中的所有长度为 k
的子串的派生变量的计算。这里的计算顺序依次为从第 1个字符开始的长度为 k的子串、从第 2个字符开始的长度为 k的子串,…,从第 |x|-k+1个字符开始的长度为 k的子串。语句 (6)控制实现长度为 k
的子串的不同切分方式下的派生的可能性。
2009-7-26 727
8.4 小结本章讨论了 CFL 的性质和 CFL的一些判定问题 。
(1) 泵引理:与 RL的泵引理类似,CFL的泵引理用来证明一个语言不是 CFL。 它不能证明一个语言是 CFL,而且也是采用反证法 。 Ogden引理是对泵引理的强化,它可以使我们将注意力集中到所给字符串的那些令我们感兴趣的地方 ——特异点 。
2009-7-26 728
8.4 小结
(2) CFL 在并、乘、闭包、代换、同态映射、
逆同态映射等运算下是封闭的。
(3) CFL在交、补运算下是不封闭。
(4) 存在判定 CFG产生的语言是否为空、是否有穷、是否无穷,以及一个给定的符号串是否为该文法产生的语言的一个句子的算法。
2009-7-26 729
第 9章 图灵机
图灵机 (Turing machine)是由图灵 (Alan
MathisomTuring)在 1936年提出的,它是一个通用的计算模型 。
通过研究 TM,来研究 递归可枚举集
(recursively enumerable set)和 部分地归函数 (partial recursive function)。
对算法和可计算性进行研究提供形式化描述工具。
2009-7-26 730
第 9章 图灵机
有效过程 (effective procedure)与 算法
(algorithm)。
希尔伯特纲领。
1931年,奥地利 25岁的数理逻辑学家哥德尔 (Kuri
G?del)发表了著名的不完整性理论。
具有有穷描述的过程是可数无穷多的,但函数却是不可数无穷多的。
世界上存在着许多的问题和函数,是无法用具有有穷描述的过程完成计算的 ——是 不可计算的
(incomputable) 。
2009-7-26 731
第 9章 图灵机
主要内容
– TM作为一个计算模型,它的基本定义,即时描述,TM接受的语言; TM的构造技术; TM
的变形; Church-Turing论题;通用 TM。 可计算语言,不可判定性,P-NP问题 )。
重点
– TM的定义,TM的构造 。
难点
– TM的构造。
2009-7-26 732
9.1 基本概念
图灵提出 TM具有以下两个性质
– 具有有穷描述。
– 过程必须是由离散的、可以机械执行的步骤组成。
基本模型包括
– 一个有穷控制器。
– 一条含有无穷多个带方格的输入带。
– 一个读头。
2009-7-26 733
9.1 基本概念
一个移动将完成以下三个动作:
–改变有穷控制器的状态;
–在当前所读符号所在的带方格中印刷一个符号;
–将读头向右或者向左移一格 。
2009-7-26 734
直观物理模型
2009-7-26 735
9.1.1 基本 TM
图灵机 (Turing machine)/基本的图灵机
TM M=(Q,∑,Γ,δ,q0,B,F),
Q为状态的有穷集合,?q∈ Q,q为 M的一个 状态 ;
q0∈ Q,是 M的 开始状态,对于一个给定的输入串,M从状态 q0启动,读头正注视着输入带最左端的符号;
2009-7-26 736
9.1.1 基本 TM
F?Q,是 M的 终止状态集,?q∈ F,q为 M
的一个终止状态。与 FA和 PDA不同,一般地,一旦 M进入终止状态,它就停止运行。
Γ为 带符号表 (tape symbol),?X∈ Γ,X为
M的一个带符号,表示在 M的运行过程中,
X可以在某一时刻出现在输入带上;
2009-7-26 737
9.1.1 基本 TM
B∈ Γ,被称为 空白符 (blank symbol),含有空白符的带方格被认为是空的;
∑?Γ-{B}为 输入字母表,?a∈ ∑,a为 M的一个输入符号。除了空白符号 B之外,只有
∑中的符号才能在 M启动时出现在输入带上;
2009-7-26 738
9.1.1 基本 TM
δ,Q× Γ?Q× Γ× {R,L},为 M的 移动函数 (transaction function)。
δ(q,X)=(p,Y,R)表示 M在状态 q读入符号 X,
将状态改为 p,并在这个 X所在的带方格中印刷符号 Y,然后将读头向右移一格;
δ(q,X)=(p,Y,L)表示 M在状态 q读入符号
X,将状态改为 p,并在这个 X所在的带方格中印刷符号 Y,然后将读头向左移一格。
2009-7-26 739
9.1.1 基本 TM
例 9-1 设 M1=({q0,q1,q2},{0,1},{0,1,
B},δ,q0,B,{q2}),其中 δ的定义如下,对于此定义,也可以用表 9-1表示。
δ(q0,0)= (q0,0,R)
δ(q0,1)= (q1,1,R)
δ(q1,0)= (q1,0,R)
δ(q1,B)= (q2,B,R)
2009-7-26 740
9.1.1 基本 TM
0 1 B
q0 (q0,0,R) (q1,1,R)
q1 (q1,0,R) (q2,B,R)
q2
2009-7-26 741
9.1.1 基本 TM
即时描述 (instantaneous description,ID)
α1α2∈ Γ*,q∈ Q,α1qα2称为 M的 即时描述
– q为 M的当前状态。
– α1α2为 M的输入带最左端到最右的非空白符号组成的符号串或者是 M的输入带最左端到 M的读头注视的带方格中的符号组成的符号串
– M正注视着 α2的最左符号。
2009-7-26 742
9.1.1 基本 TM
设 X1X2…X i-1qXiXi+1…X n是 M的一个 ID
如果 δ(q,Xi)=(p,Y,R),则,M的下一个 ID为
X1X2… Xi-1YpXi+1… Xn
记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… Xi-1YpXi+1… Xn
– 表示 M在 ID X1X2… Xi-1qXiXi+1… Xn下,经过一次移动,将 ID变成 X1X2… Xi-1YpXi+1… Xn 。
2009-7-26 743
9.1.1 基本 TM
如果 δ(q,Xi)=(p,Y,L)则,
– 当 i≠1时,M的下一个 ID为
X1X2…pX i-1YXi+1…X n
记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… pXi-1YXi+1… Xn
– 表示 M在 ID X1X2…X i-1qXiXi+1…X n下,经过一次移动,将 ID变成 X1X2…pX i-1YXi+1…X n;
2009-7-26 744
9.1.1 基本 TM
├M是 Γ*QΓ*× Γ*QΓ*上的一个二元关系
– ├Mn表示 ├M的 n次幂,├Mn =(├M)n
– ├M+表示 ├M的正闭包,├M+=(├M)+
– ├M*表示 ├M的克林闭包,├M*=(├M)*
在意义明确时,分别用 ├,├n,├+,├*表示 ├M,├Mn,├M+,├M*。
2009-7-26 745
9.1.1 基本 TM
例 9-2 例 9-1所给的 M1在处理输入串的过程中经历的 ID变换序列。
( 1)处理输入串 000100的过程中经历的 ID的变换序列如下:
q0000100├M 0q000100├M 00q00100
├M 000q0100├M 0001q100├M 00010q10
├M 000100 q1├M 000100Bq2
2009-7-26 746
9.1.1 基本 TM
( 2)处理输入串 0001的过程中经历的 ID变换序列如下:
q00001├M 0q0001├M 00q001
├M 000q01├M 0001q1├M 0001Bq2
( 3)处理输入串 000101的过程中经历的 ID变换序列如下:
q0000101├M 0q000101├M 00q00101
├M 000q0101├M 0001q101├M 00010q11
2009-7-26 747
9.1.1 基本 TM
( 4)处理输入串 1的过程中经历的 ID变换序列如下:
q01├M 1q1├M 1Bq2
( 5)处理输入串 00000的过程中经历的 ID变换序列如下:
q000000├M 0q00000├M 00q0000
├M 000q000├M 0000 q00├M 00000q0B
2009-7-26 748
9.1.1 基本 TM
TM接受的语言
L(M)={x | x∈ ∑* & q0x├M* α1 qα2 & q∈ F &α1、
α2∈ Γ*}
TM接受的语言叫做 递归可枚举语言 (recursively
enumerable language,r.e.)。
如果存在 TM M=(Q,∑,Γ,δ,q0,B,F),L=L(M),
并且对每一个输入串 x,M都停机,则称 L为 递归语言 (recursively language)。
2009-7-26 749
9.1.1 基本 TM
例 9-3 设有 M2=({q0,q1,q2,q3},{0,1},{0,1,
B},δ,q0,B,{q3}),其中 δ的定义如下:
δ(q0,0)= (q0,0,R)
δ(q0,1)= (q1,1,R)
δ(q1,0)= (q1,0,R)
δ(q1,1)= (q2,1,R)
δ(q2,0)= (q2,0,R)
δ(q2,1)= (q3,1,R)
2009-7-26 750
9.1.1 基本 TM
0 1 B
q0 (q0,0,R) (q1,1,R)
q1 (q1,0,R) (q2,1,R)
q2 (q2,0,R) (q3,1,R)
q3
2009-7-26 751
9.1.1 基本 TM
为了弄清楚 M2接受的语言,需要分析它的工作过程。
( 1)处理输入串 00010101的过程中经历的 ID
变换序列如下:
q000010101├ 0q00010101├ 00q0010101
├ 000q010101├ 0001q10101├ 00010q1101
├ 000101 q201├000101 0 q21├ 00010101q3
2009-7-26 752
9.1.1 基本 TM
M2在 q0状态下,遇到 0时状态仍然保持为 q0,
同时将读头向右移动一格而指向下一个符号;
在 q1状态下遇到第一个 1时状态改为 q1,并继续右移读头,以寻找下一个 1;在遇到第二个 1时,动作类似,只是将状态改为 q2;
当遇到第三个 1时,进入终止状态 q3,此时它正好扫描完整个输入符号串,表示符号串被 M2接受。
2009-7-26 753
9.1.1 基本 TM
( 2)处理输入串 1001100101100的过程中经历的 ID变换序列如下:
q01001100101100├1q1001100101100
├10 q101100101100├100q11100101100
├ 1001 q2100101100├10011q300101100
M2遇到第三个 1时,进入终止状态 q3,输入串的后缀 00101100还没有被处理。但是,
由于 M2已经进入终止状态,表示符号串
1001100101100被 M2接受
2009-7-26 754
9.1.1 基本 TM
( 3)处理输入串 000101000的过程中经历的 ID变换序列如下:
q0000101000├0q000101000├00q00101000
├ 000q0101000├0001q101000├00010q11000
├ 000101q2000├0001010 q200├ 00010100 q20
├ 000101000 q2B
当 M2的 ID变为 000101000q2B时,因为无法进行下一个移动而停机,不接受输入串 000101000。
2009-7-26 755
9.1.1 基本 TM
M2接受的语言是字母表 {0,1}上那些至少含有 3个 1的 0,1符号串。请读者考虑,如何构造出接受字母表 {0,1}上那些含且恰含有 3个 1的符号串的 TM。
2009-7-26 756
9.1.1 基本 TM
例 9-4 构造 TM M3,使 L(M)={0n1n2n | n≥1}。
分析:
– 不能通过“数” 0,1、或者 2的个数来实现检查。
– 最为原始的方法来比较它们的个数是否是相同的:
消除一个 0、然后消除一个 1,最后消除一个 2。
– 消除的 0的带方格上印刷一个 X,在消除的 1的带方格上印刷一个 Y,在消除的 2的带方格上印刷一个
Z。
2009-7-26 757
9.1.1 基本 TM
–正常情况下,输入带上的符号串的一般形式为
00… 0011… 1122… 22
–TM启动后,经过一段运行,输入带上的符号串的一般情况为
X… X0… 0Y… Y1… 1Z… Z2… 2BB
–需要给予边界情况密切的关注。
2009-7-26 758
9.1.1 基本 TM
边界情况
X… XX… XY… YY… YZ… Z2… 2BB
X… XX… XY… Y1… 1Z… Z2… 2BB
X… X0… 0Y… YY… YZ… Z2… 2BB
X… X0… 0Y… Y1… 1Z… ZZ… ZBB
X… X0… 0Y… YY… YZ… ZZ… ZBB
2009-7-26 759
构造思路
2009-7-26 760
移动函数
0 1 2 X Y Z B
q0 (q0,X,R) (q4,Y,R)
q1 (q1,0,R) (q2,Y,R) (q1,Y,R)
q2 (q2,1,R) (q3,Z,L) (q2,Z,R)
q3 (q3,0,L) (q3,1,L) (q0,X,R) (q3,Y,L) (q3,Z,L)
q4 (q4,Y,R) (q4,Z,R) (q5,B,R)
q5
2009-7-26 761
9.1.2 TM作为非负整函数的计算模型
非负整数进行编码 —— 1进制
– 用符号串 0n表示非负整数 n。
用符号串表示 k元函数 f(n1,n2,…,n k)的输入。
如果 f(n1,n2,…,n k)=m,则该 TM的输出为 0m 。
knnn 101100 21?
2009-7-26 762
9.1.2 TM作为非负整函数的计算模型
图灵可计算的 (Turing computable)
设有 k元函数 f(n1,n2,…,n k)=m,TM M=(Q,
∑,Γ,δ,q0,B,F)接受输入串输出符号串 0m;当 f(n1,n2,…,n k)无定义时,
TM M没有恰当的输出给出。称 TM M计算 k
元函数 f(n1,n2,…,n k),也称 f(n1,n2,…,n k)为
TM M计算的函数。也称 f是 图灵可计算的。
knnn 101100 21?
2009-7-26 763
9.1.2 TM作为非负整函数的计算模型
完全递归函数 (total recursive function)
–设有 k元函数 f(n1,n2,…,n k),如果对于任意的 n1,n2,…,n k,f均有定义,也就是计算 f的
TM总能给出确定的输出,则称 f为 完全递归函数。
部分递归函数 (partial recursive function)
–TM计算的函数称为 部分递归函数。
2009-7-26 764
9.1.2 TM作为非负整函数的计算模型
例 9-5 构造 TM M4,对于任意非负整数 n,m,
M4计算 m+n。
分析,M4的输入为 0n10m,输出 0n+m的符号串 。 n
和 m为 0的情况需要特殊考虑 。
( 1) 当 n为 0时,只用将 1变成 B就完成了计算,此时无需考察 m是否为 0;
( 2) 当 m为 0时,需要扫描过表示 n的符号 0,并将 1
改为 B。
( 3) 当 n和 m都不为 0时,我们需要将符号 1改为 0,
并将最后一个 0改为 B。
2009-7-26 765
构造思路
2009-7-26 766
M4
M4=({q0,q1,q2,q3},{0,1},{0,1,B},δ,q0,B,
{q1})
δ(q0,1)=(q1,B,R)
δ(q0,0)=(q2,0,R)
δ(q2,0)=(q2,0,R)
δ(q2,1)=(q2,0,R)
δ(q2,B)=(q3,B,L)
δ(q3,0)=(q1,B,R)
2009-7-26 767
9.1.2 TM作为非负整函数的计算模型
例 9-6 构造 TM M5,对于任意非负整数 n,
m,M5计算如下函数:
0
{
mn
mn
n≥ m
n< m
2009-7-26 768
构造思路
2009-7-26 769
M5
M5=({q0,q1,q2,q3,q4,q5,q6,},{0,1},{0,1,X,
B},δ,q0,B,{q6})
δ(q0,0 )=(q1,B,R)
δ(q0,1 )=(q5,B,R)
δ(q1,0 )=(q1,0,R)
δ(q1,1 )=(q1,1,R)
δ(q1,X )=(q2,X,R)
δ(q2,X )=(q2,X,R)
δ(q2,0 )=(q3,X,L)
δ(q2,B )=(q4,B,L)
δ(q3,X )=(q3,X,L)
δ(q3,1 )=(q3,1,L)
δ(q3,0 )=(q3,0,L)
δ(q3,B )=(q0,B,R)
2009-7-26 770
M5
δ(q4,X )=(q4,B,L)
δ(q4,1 )=(q6,0,R)
δ(q5,X )=(q5,B,R)
δ(q5,0 )=(q5,B,R)
δ(q5,B )=(q6,B,R)。
2009-7-26 771
9.1.3 TM的构造
1,状态的有穷存储功能的利用
例 9-7 构造 TM M6,使得 L(M6)={x |
x∈ {0,1}*& x中至多含 3个 1}。
分析,M6只用记录已经读到的 1的个数。
q[0]表示当前已经读到 0个 1;
q[1]表示当前已经读到 1个 1;
q[2]表示当前已经读到 2个 1;
q[3]表示当前已经读到 3个 1。
2009-7-26 772
1,状态的有穷存储功能的利用
M6=({q[0],q[1],q[2],q[3],q[f]},{0,1},
{0,1,B},δ,q[0],B,{q[f]})
δ(q[0],0 )=(q[0],0,R)
δ(q[0],1 )=(q[1],1,R)
δ(q[0],B )=(q[f],B,R)
δ(q[1],0 )=(q[1],0,R)
δ(q[1],1 )=(q[2],1,R)
δ(q[1],B )=(q[f],B,R)
δ(q[2],0 )=(q[2],0,R)
δ(q[2],1 )=(q[3],1,R)
δ(q[2],B )=(q[f],B,R)
δ(q[3],0 )=(q[3],0,R)
δ(q[3],B )=(q[f],B,R)
2009-7-26 773
1,状态的有穷存储功能的利用
TM是要接受且仅接受恰含 3个 1的 0,1串的
TM,对 M6进行修改,得到 M7
L(M7) ={x | x∈ {0,1}*& x中含且仅含 3个 1}
M7=({q[0],q[1],q[2],q[3],q[f]},{0,1},{0,1,
B},δ,q[0],B,{q[f]})
2009-7-26 774
L(M7) ={x | x∈ {0,1}*且 x中仅含 3个 1}
δ(q[0],0 )=(q[0],0,R)
δ(q[0],1 )=(q[1],1,R)
δ(q[1],0 )=(q[1],0,R)
δ(q[1],1 )=(q[2],1,R)
δ(q[2],0 )=(q2),0,R)
δ(q[2],1 )=(q[3],1,R)
δ(q[3],0 )=(q[3],0,R)
δ(q[3],B )=(q[f],B,R)
2009-7-26 775
L(M8)={x | x∈ {0,1}*& x中至少含 3个 1}
M8=({q[0],q[1],q[2],q[f]},{0,1},{0,1,B},δ,
q[0],B,{q[f]})
δ(q[0],0 )=(q[0],0,R)
δ(q[0],1 )=(q[1],1,R)
δ(q[1],0 )=(q[1],0,R)
δ(q[1],1 )=(q[2],1,R)
δ(q[2],0 )=(q[2],0,R)
δ(q[2],1 )=(q[f],1,R)
2009-7-26 776
1,状态的有穷存储功能的利用
例 9-8 构造 TM M9它的输入字母表为 {0,1},现在要求 M9在它的输入符号串的尾部添加子串 101。
分析:
– 将待添加子串 101存入穷控制器。
– 首先找到符号串的尾部。
– 将给定符号串中的符号依次地印刷在输入带上
– 每印刷一个符号,就将它从有穷控制器的“存储器”中删去,当该“存储器”空时,TM就完成了工作。
2009-7-26 777
1,状态的有穷存储功能的利用
M9=({q[101],q[01],q[1],q[ε]},{0,1},{0,1,B},
δ,q[101],B,{q[ε]})
其中 δ的定义为:
δ(q[101],0 )=(q[101],0,R)
δ(q[101],1 )=(q[101],1,R)
δ(q[101],B )=(q[01],1,R)
δ(q[01],B )=(q[1],0,R)
δ(q[1],B )=(q[ε],1,R)
2009-7-26 778
1,状态的有穷存储功能的利用
例 9-9 构造 TM M10它的输入字母表为 {0,1},要求 M10在它的输入符号串的开始处添加子串 101。
将有穷控制器中的“存储器”分成两部分
– 第一部分用来存放待添加的子串。
– 第二部分用来存储因添加符号串当前需要移动的输入带上暂时无带方格存放的子串。
– 一般形式为 q[x,y]
x待添加子串
y当前需要移动的输入带上暂时无带方格存放的子串。
2009-7-26 779
1.状态的有穷存储功能的利用
q[x,ε]为开始状态;
q[ε,ε]为终止状态。
设 a,b为输入符号
δ(q[ax,y],b) = (q[x,yb],a,R)
– 表示在没有完成待插入子串的印刷之前,要将待插入子串的首字符印刷在 TM当前扫描的带方格上。
2009-7-26 780
1,状态的有穷存储功能的利用
δ(q[ε,a y],b) = (q[ε,yb],a,R)
– 表示 当完成待插入子串的插入工作之后,必须将插入点之后的子串顺序地向后移动。
δ(q[ε,a y],B) = (q[ε,y],a,R)
– 表示读头当前所指的带方格为空白,现将“存储器”的第二部分中的当前首符号 a印刷在此带方格上,同时将这个符号从存储器中删除。
2009-7-26 781
2,多道 (multi-track)技术
例 9-10 构造 M11,使 L(M11)={xcy | x,y∈ {0,1}+ 且
x≠y}。
分析:
– 以符号 c为分界线,逐个地将 c前的符号与 c后的符号进行比较。
– 当发现对应符号不同时,就进入终止状态。
– 当发现 x与 y的长度不相同而进入终止状态。
– 发现它们相同而停机。
– 一个道存放被检查的符号串,另一个存放标记符。
2009-7-26 782
构造思路
2009-7-26 783
2,多道 (multi-track)技术
M11=({q[ε],q[0],q[1],p[0],p[1],q,p,s,f},{[B,0],
[B,1],[B,c]},{[B,0],[B,1],[B,c],[?,0],[?,1],[B,B]},
δ,q[ε],[B,B],{f})
δ(q[ε],[B,0] )=(q[0],[?,0],R)
δ(q[ε],[B,1])=(q[1],[?,1],R)
δ(q[a],[B,d])=(q[a],[B,d],R)
δ(q[a],[B,c])=(p[a],[B,c],R)
δ(p[a],[?,b])=(p[a],[?,b],R)
δ(p[a],[B,a])=(p,[?,a],L)
2009-7-26 784
2,多道 (multi-track)技术
δ(p,[?,b])=(p,[?,b],L)
δ(p,[B,c])=(q,[B,c],L)
δ(q,[B,a])=(q,[B,a],L)
δ(q,[?,a])=(q[ε],[?,a],R)
δ(p[a],[B,b])=(f,[B,b],R)
δ(p[a],[B,B])=(p,[B,B],R)
δ(s,[?,b])=(s,[?,b],R)
δ(s,[B,a])=(f,[B,a],R)
2009-7-26 785
3,子程序 (subroutine)技术
将 TM的设计看成是一种特殊的程序设计,
将子程序的概念引进来。
一个完成某一个给定功能的 TM M′从一个状态 q开始,到达某一个固定的状态 f结束。
将这两个状态作为另一个 TM M的两个一般的状态。
当 M进入状态 q时,相当于启动 M′(调用 M′
对应的子程序 );当 M′进入状态 f时,相当于返回到 M的状态 f。
2009-7-26 786
3,子程序 (subroutine)技术
例 9-11构造 M12完成正整数的乘法运算。
分析,
– 设两个正整数分别为 m和 n。
– 输入串为 0n10m 。
– 输出应该为 0n*m 。
– 算法思想:每次将 n个 0中的 1个 0改成 B,就在输入串的后面复写 m个 0。
– 在 M12的运行过程中,输入带的内容为
Bh0n-h10m10m*hB
2009-7-26 787
正整数的乘法运算
( 1)初始化。完成将第一个 0变成 B,并在最后一个 0后写上 1。我们用 q0表示启动状态,
用 q1表示完成初始化后的状态。首先,消除前 n个 0中的第一个 0,
q00n10m├+ Bq10n-110m1
( 2)主控系统。从状态 q1开始,扫描过前 n
个 0中剩余的 0和第一个 1,将读头指向 m个 0
的第一个,此时的状态为 q2。其 ID变化为
Bhq10n-h10m10m*(h-1)B ├+ Bh0n-h1 q20m10m*(h-1)B
2009-7-26 788
正整数的乘法运算
当子程序完成 m个 0的复写后,回到 q3。这个状态相当于子程序的返回(终止)状态。
然后在 q3状态下,将读头移回到前 n个 0中剩余的 0中的第一个 0,并将这个 0改成 B,
进入 q1状态,准备进行下一次循环
Bh0n-h1 q30m10m*hB ├+ Bh+1q10n-h-110m10m*hB
2009-7-26 789
正整数的乘法运算
当完成 m*n个 0的复写之后,清除输入带上除了这 m*n个 0以外的其他非空白符号。 q4
为终止状态
Bnq110m10m*nB ├+ Bn+1+m+1 q4 0m*nB
( 3) 子程序 。 完成将 m个 0复写到后面的任务 。 从 q2启动,到 q3结束,返回到主控程序 。
Bh+10n-h-11 q20m10m*hB ├+ Bh+10n-h-11 q30m10m*h+1B
2009-7-26 790
9.2 TM的变形
从不同的方面对 TM进行扩充。
– 双向无穷带 TM。
– 多带 TM。
– 不确定的 TM。
– 多维 TM等。
它们与基本的 TM等价。
2009-7-26 791
9.2.1 双向无穷带 TM
物理模型
2009-7-26 792
9.2.1 双向无穷带 TM
双向无穷带 (Turing machine with two-way
infinite tape,TM)
TM M=(Q,∑,Γ,δ,q0,B,F)
Q,∑,Γ,δ,q0,B,F的意义同定义 9-1。
M的即时描述 ID同定义9 -2。
允许 M的读头处在输入串的最左端时,仍然可以向左移动。
2009-7-26 793
9.2.1 双向无穷带 TM
M的当前 ID X1X2…X i-1qXiXi+1…X n
如果 δ(q,Xi)=(p,Y,R)
– 当 i≠1并且 Y≠B时,M的下一个 ID为
X1X2… Xi-1YpXi+1… Xn
– 记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… Xi-1YpXi+1… Xn
– 表示 M在 ID X1X2…X i-1qXiXi+1…X n下,经过一次移动,将 ID变成 X1X2…X i-1YpXi+1…X n。
2009-7-26 794
9.2.1 双向无穷带 TM
– 当 i=1并且 Y=B时,M的下一个 ID为
pX2… Xn
– 记作
qX1X2… Xn├M pX2… Xn
– 这就是说,和基本 TM在读头右边全部是 B时,
这些 B不在 ID中出现一样,当双向无穷带 TM的读头左边全部是 B时,这些 B也不在该 TM的 ID
中出现。
2009-7-26 795
9.2.1 双向无穷带 TM
如果 δ(q,Xi)=(p,Y,L)
– 当 i≠1时,M的下一个 ID为
X1X2… pXi-1YXi+1… Xn
– 记作
X1X2… Xi-1qXiXi+1… Xn├M X1X2… pXi-1YXi+1… Xn
– 表示 M在 ID X1X2…X i-1qXiXi+1… n下,经过一次移动,将 ID变成 X1X2…pX i-1YXi+1…X n 。
2009-7-26 796
9.2.1 双向无穷带 TM
– 当 i=1时,M的下一个 ID为
pBYX2… Xn
– 记作
qX1X2… Xn├M pBYX2… Xn
– 表示 M在 ID qX1X2…X n下,经过一次移动,将
ID变成 pBYX2…X n。
2009-7-26 797
9.2.1 双向无穷带 TM
定理 9-1 对于任意一个双向无穷带 TMM,存在一个等价的基本 TMM′。
证明要点:
– 双向无穷存储的模拟:用一个具有 2个道的基本 TM来模拟:一个道存放 M开始启动时读头所注视的带方格及其右边的所有带方格中存放的内容;另一个道按照相反的顺序存放开始启动时读头所注视的带方格左边的所有带方格中存放的内容 。
– 双向移动的模拟:在第 1道上,移动的方向与原来的移动方向一致,在第 2道上,移动的方向与原来的移动方向相反。
2009-7-26 798
用单向无穷带模拟双向无穷带
2009-7-26 799
9.2.2 多带 TM
多带 TM(multi-tape turing machine)
允许 TM有多个双向无穷带,每个带上有一个相互独立的读头。
k带 TM在一次移动中完成如下三个动作
⑴ 改变当前状态;
⑵ 各个读头在自己所注视的带方格上印刷一个希望的符号 。
⑶ 各个读头向各自希望的方向移动一个带方格 。
2009-7-26 800
9.2.2 多带 TM
2009-7-26 801
9.2.2 多带 TM
定理 9-2 多带 TM与基本的 TM等价。
证明要点:
对一个 k带 TM,用一条具有 2k道的双向无穷带 TMM′,实现对这个 k带 TMM的模拟。
对应 M的每一条带,M′用两个道来实现模拟。
其中一条道用来存放对应的带的内容,另一条道专门用来标记对应带上的读头所在的位置。
2009-7-26 802
9.2.3 不确定的 TM
不确定 TM与基本 TM的区别是对于任意的
(q,X)∈ Q× Γ,
δ(q,X)={(q1,Y1,D1),(q2,Y2,D2),…,
(qk,Yk,Dk)}
Dj为读头的移动方向。即 Dj∈ {R,L}。
表示 M在状态 q,读到 X时,可以有选择地进入状态 qj,印刷字符 Yj,按 Dj移动读头
L(M)={w | w∈ ∑*且 ID1├*IDn,且 IDn含 M
的终止状态 }。
2009-7-26 803
9.2.3 不确定的 TM
定理 9-3 不确定的 TM与基本的 TM等价
证明要点:
– 让等价的基本 TMM′ 具有 3条带。
– 第 1条带用来存放输入。
– 第 2条带上系统地生成 M的各种可能的移动序列
– M′在第 3条带上按照第 2条带上给出的移动系列处理输入串,如果成功,则接受之,如果不成功,则在第 2条带上生成下一个可能的移动系列,开始新一轮的“试处理”。
2009-7-26 804
9.2.4 多维 TM
多维 TM(multi-dimensional Turing machine)
– 读头可以沿着多个维移动。
k维 TM(k-dimensional Turing machine)
TM可以沿着 k维移动。
k维 TM的带由 k维阵列组成,而且在所有的
2k个方向上都是无穷的,它的读头可以向着 2k个方向中的任一个移动。
2009-7-26 805
9.2.4 多维 TM
定理 9-4 多维 TM与基本 TM等价。
用一维的形式表示 k维的内容,就像多维数组在计算机的内存中都被按照一维的形式实现存储一样。
段 (Segment)用来表是一维上的内容。
用 #作为段分割符。
¢用作该字符串的开始标志,$用作该字符串的结束标志。
2009-7-26 806
基本 TM模拟 2维 TM
B a1 a2 a3 a4 B B B B B B
B a5 B a6 a7 a8 a9 a10 B B B
B a11 B B B B a12 B a13 B a14
a15 a16 B B B B B B B B a16
B B B a17 B B B B B a18 B
a19 a20 B B B B B B B B B
B B B B B B B B B B a21
2009-7-26 807
基本 TM模拟 2维 TM
¢ Ba1a2a3a4BBBBBB # Ba5Ba6a7a8a9a10BBB #
Ba11BBBBa12Ba13Ba14 # a15 a16BBBBBBBB a16#
BBB a17BBBBBa18B # a19a20BBBBBBBBB #
BBBBBBBBBBa21$
2009-7-26 808
9.2.5 其他 TM
1,多头 TM
2,离线 TM
3,作为枚举器的 TM
4,多栈机
5,计数机
6,Church-Turing论题与随机存取机
2009-7-26 809
1,多头 TM
多头 TM(multi-head Turing machine)
指在一条带上有多个读头,它们受 M的有穷控制器的统一控制,M根据当前的状态和这多个头当前读到的字符确定要执行的移动。在 M的每个动作中,各个读头所印刷的字符和所移动的方向都可以是相互独立的 m
2009-7-26 810
1,多头 TM
定理 9-5 多头 TM与基本的 TM等价。
可以用一条具有 k+1个道的基本 TM来模拟一个具有 k个头的 TM( k头 TM)。其中一个道用来存放原输入带上的内容,其余 k个道分别用来作为 k个读头位置的标示。
2009-7-26 811
2,离线 TM
离线 TM(off-line Turing machine)
–有一条输入带是只读带 (read-only tape)的多带 TM。
符号¢和 $用来限定它的输入串存放区域,
¢在左边,$在右边。
不允许该带上的读头移出由¢和 $限定的区域 ——离线的 TM。
如果只允许只读带上的读头从左向右移动,
则称之为 在线 TM(on-line Turing machine)。
2009-7-26 812
2,离线 TM
定理 9-6 离线 TM与基本的 TM等价。
证明要点:让模拟 M的离线 TM比 M多一条带,并且用这多出来的带复制 M的输入串。
然后将这条带看作是 M的输入带,模拟 M
进行相应的处理。
2009-7-26 813
3,作为枚举器的 TM
作为枚举器的 TM(Turing machine as enumerator)
– 多带 TM,其中有一条带专门作为输出带,用来记录产生语言的每一个句子。
在枚举器中,一旦一个字符被写在了输出带上,
它就不能被更改。如果该带上的读头的正常移动方向是向右移动的话,这个带上的读头是不允许向左移动的。
如果这个语言有无穷多个句子,则它将永不停机。
它每产生一个句子,就在其后打印一个分割符
,#”。
枚举器产生的语言记为 G(M)。
2009-7-26 814
3,作为枚举器的 TM
规范的顺序 (canonical order)
定理 9-7 L为递归可枚举语言的充分必要条件是存在一个 TM M,使得 L=G(M)。
定理 9-8 一个语言 L为递归语言的充分必要条件是存在一个 TMM,使得 L=G(M),并且 L
是被 M按照规范顺序产生的。
2009-7-26 815
4,多栈机
多栈机 (multi-stack machines)是一个拥有一条只读输入带和多条存储带的不确定 TM。
– 多栈机的只读带上的读头不能左移。
– 存储带上的读头可以向左和向右移动。
右移时,一般都在当前注视的带方格上印刷一个非空白字符
左移时,必须在当前注视的带方格中印刷空白字符 B。
一个确定的 双栈机 (double stack machines)是一个确定的 TM,它具有一条只读的输入带和两条存储带。存储带上的读头左移时,只能印刷空白符号 B 。
2009-7-26 816
4,多栈机
下推自动机是一种非确定的多带 TM。它有一条只读的输入带,一条存储带。
定理 9-9 一个任意的单带 TM可以被一个确定的双栈机模拟。
2009-7-26 817
5,计数机
计数机 (counter machine)
– 有一条只读输入带和若干个用于计数的单向无穷带的离线 TM。
– 拥有 n个用于计数带的计数机被称为 n计数机 。
– 用于计数的带上仅有两种字符,一个为相当于是作为栈底符号的 Z,该字符也可以看作是计数带的首符号,它仅出现在计数带的最左端;
另一个就是空白符 B。 这个带上所记的数就是从 Z开始到读头当前位置所含的 B的个数 。
定理 9-10 TM可以被一个双计数机模拟。
2009-7-26 818
6.丘奇 -图灵 论题与随机存取机
对于任何可以用有效算法解决的问题,都存在解决此问题的 TM。
随机存取机 (random access machine,RAM)含有无穷多个存储单元,这些存储单元被按照 0,1、
2,… 进行编号,每个存储单元可以存放一个任意的整数;有穷个能够保存任意整数的算术寄存器。
这些整数可以被译码成通常的各类计算机指令。
定理 9-11如果 RAM的基本指令都能用 TM来实现,那么就可以用 TM实现 RAM。
2009-7-26 819
9.3 通用 TM
通用 TM(universal Turing machine)
– 实现对所有 TM的模拟。
编码系统
– 它可以在实现对 TM的表示的同时,实现对该
TM处理的句子的表示。
– 用 0和 1对这些除空白符以外的其他的带符号进行编码。同时也可以用 0和 1对 TM的移动函数进行编码。
2009-7-26 820
9.3 通用 TM
M=({q1,q2,…,q n},{0,1},{0,1,B},δ,q1,
B,{q2})
用 X1,X2,X3分别表示 0,1,B,用 D1、
D2分别表示 R,L。
δ(qi,Xj)=(qk,Xl,Dm)可以用 0i10j10k10l10m表示。
2009-7-26 821
9.3 通用 TM
M可用
111 code1 11 code2 11 …… 11 code r 111
codet 是动作 δ(qi,Xj)=(qk,Xl,Dm)的形如
0i10j10k10l10m的编码。
TMM和它的输入串 w则可以表示成
111 code1 11 code2 11 …… 11 code r 111w
按照规范顺序分别对表示 TM的符号行和表示输入的符号行进行排序。
2009-7-26 822
9.3 通用 TM
Ld={w | w是第 j个句子,并且第 j个 TM不接受它 }不是递归可枚举语言。
通用语言 (universal language)
– Lu={<M,w> | M接受 w}
– <M,w>为如下形式的串,表示 TMM=({q1,
q2,…,qn},{0,1},{0,1,B},δ,q1,B,{q2})和它的输入串 w。
111 code1 11 code2 11 … 11 coder 111w
2009-7-26 823
9.3 通用 TM
例 9-12 设 TM M2=({ q1,q2,q3,q4},{0,1},{0,
1,B},δ,q4,B,{q3}),其中 δ的定义如下,
δ(q4,0)= (q4,0,R)
δ(q4,1)= (q1,1,R)
δ(q1,0)= (q1,0,R)
δ(q1,1)= (q2,1,R)
δ(q2,0)= (q2,0,R)
δ(q2,1)= (q3,1,R)
2009-7-26 824
9.3 通用 TM
编码为
1110000101000010101100001001010010110
1010101011010010010010110010100101011
00100100010010111
通用 TM检查 M是否接受字符串 001101110
1110000101000010101100001001010010110
1010101011010010010010110010100101011
00100100010010111001101110
2009-7-26 825
9.4 几个相关的概念
可计算性 (computability)理论是研究计算的一般性质的数学理论。计算的过程就是执行算法的过程。
可计算理论的中心问题是建立计算的数学模型,
研究哪些是可计算的,哪些是不可计算的。
可计算理论又称为 算法理论 (algorithm theory)。
在直观意义下,算法具有有限性、机械可执行性、
确定性、终止性等特征。
可计算问题可以等同于图灵可计算问题。
2009-7-26 826
9.4 几个相关的概念
可判定的 (decidable)问题
– 它对应的语言是递归的。
不可判定的 (undecidable)
– 没有这样的算法,它以问题的实例为输入,并能给出相应的“是”与“否”的判定。
递归语言 举例
( 1) LDFA={<M,w> | M是一个 DFA,w是字符串,
M接受 w}。
( 2) LNFA={<M,w> | M是一个 NFA,w是字符串,
M接受 w}。
2009-7-26 827
9.4 几个相关的概念
( 3) LRE={<r,w> | r是一个 RE,w是字符串,w
是 r的一个句子 }。
( 4) EDFA={<M> | M是一个 DFA,且 L(M)=Φ}。
( 5) EQDFA={<M1,M2> | M1,M2是 DFA,且
L(M1)=L(M2)}。
( 6) LCFG={<G,w> | G是一个 CFG,w是字符串,
G产生 w}。
( 7) ECFG={<G> | G是一个 CFG,且 L(G)=Φ}。
2009-7-26 828
9.4 几个相关的概念
P类问题 (class of P)
– P表示确定的 TM在多项式时间 (步数 )内可判定的语言类。这些语言对应的问题成为是 P类问题,这种语言称为多项式可判定的。
– 例如,判定一个有向图中的两个顶点之间是否存在有向路的的问题、检查两个数是否互素的问题、判定一个字符串是否为一个上下文无关语言的句子的问题都是 P类问题。
2009-7-26 829
9.4 几个相关的概念
NP类问题 (class of NP)
NP表示不确定的 TM在多项式时间 (步数 )内可判定的语言类。这些语言对应的问题称为是 NP类问题,也称这些问题是 NP复杂的,
或者 NP困难的。
这种语言称为非确定性多项式可判定的。
P=NP?是理论计算机科学和当代数学中最大的悬而未决的问题之一。
2009-7-26 830
9.4 几个相关的概念
NP完全的 (NP complete problem)
– NP类中有某些问题的复杂性与整个类的复杂性相关联。如果能找到这些问题中的任何一个的多项式时间判定算法,那么,所有的 NP问题都是多项式时间可以判定的。
– TSP(旅行商问题 )。
– 划分问题。
– 可满足性问题。
– 带有先次序的调度问题。
2009-7-26 831
9.5 小结
TM是一个计算模型,用 TM可以完成的计算被称为是图灵可计算的。
(1) TM的基本概念:形式定义、递归可枚举语言、递归语言、完全递归函数、部分递归函数。
(2) 构造技术:状态的有穷存储功能的利用、
多道技术、子程序技术。
2009-7-26 832
9.5 小结
(3) TM的变形:双向无穷带 TM、多带 TM、
不确定的 TM、多维 TM、多头 TM、离线
TM、多栈 TM,它们都与基本 TM等价。
(4) Church-Turing论题:如果 RAM的基本指令都能用 TM来实现,则 RAM就可以用
TM实现。所以,对于任何可以用有效算法解决的问题,都存在解决此问题的 TM。
(5) 通用 TM可以实现对所有 TM的模拟。
(6) 可计算语言、不可判定性,P-NP问题。
2009-7-26 833
第 10章 上下文有关语言
主要内容
– TM与 PSG的等价性。
– 线性界限自动机 (LBA)。
– LBA作为 CSL的识别器。
重点
– LBA,LBA作为 CSL的识别器 。
难点
– LBA作为 CSL的识别器。
本章的内容是介绍性。
2009-7-26 834
10.1 TM与 PSG的等价性
例 10-1 构造产生语言 {0n | n为 2的非负整数次幂 }的文法 。
设计思想:
– 在文法中设置变量 C,充当 TM中的读头的作用,
它从左到右扫描 0,并且在每次遇到一个 0时,
都用 00替换之,这使得当它从最左端移到最右端时,就完成了当前串的加倍工作,为了使串中的 0再次被加倍,变量 D充当将这个,读头,
从右端移回到最左端的作用 。 为了标记出端点,
文法用 A,B分别表示串的最左端和最右端 。
2009-7-26 835
10.1 TM与 PSG的等价性
G1,S?0
产生句子 0。
S?AC0B
产生句型 AC0B,A,B分别表示左右端点,
C为向右的倍增,扫描器,。
C0?00C
C向右扫描,将每一个 0变成 00,以实现
0个数的加倍 。
2009-7-26 836
10.1 TM与 PSG的等价性
CB?DB
C到达句型的左端点,变成 D,准备进行从右到左的扫描,以实现对句型中 0的个数的再次加倍 。
CB?E
C到达句型的左端点,变成 E,表示加倍工作已完成,准备结束 。
2009-7-26 837
10.1 TM与 PSG的等价性
0D?D0 D移回到左端点 。
AD?AC
当 D到达左端点时,变成 C,此时已经做好了进行下一次加倍的准备工作 。
0E?E0 E向右移动,以寻找左端点 A。
AE?ε
E找到 A后,一同变成 ε,从而得到一个句子 。
2009-7-26 838
10.1 TM与 PSG的等价性
G2,S?AC0B
C0?00C
CB?DB
0D?D00
CB?E
AD?AC
AC?F
F0?0F
0E?E0
AE?ε
FB?ε
另一个相关的文法
2009-7-26 839
10.1 TM与 PSG的等价性定理 10-1 对于任一 PSG G=(V,T,P,S),
存在 TM M,使得 L(M)=L(G)。
证明要点:
基本思想如下 。
– M具有两条带,其中一条带用来存放输入字符串 w,
第二条带用来试着产生 w。 即,第二条带上存放的将是一个句型 。 我们希望该句型能够派生出 w。 在开始启动时,这个句型就是 S。
2009-7-26 840
10.1 TM与 PSG的等价性
设第二条带上的句型为 γ,M按照某种策略在 γ中选择为 G的某个产生式左部的子串 α,再按照非确定的方式选择 α产生式的某一个候选式 β,用 β替换 α。 在需要时,利用适当的移动技术,让 TM可以实现将句型中的 α替换成 β的工作 。
当第二条带上的内容为一个终极符号行时,就把它与第一条带上的 w进行比较,如果相等,就接受;
如果不相等,就去寻找是否存在可以产生 w的派生 。
2009-7-26 841
10.1 TM与 PSG的等价性
由于 G为 PSG,所以,在整个,试派生,过程中,我们是无法总能根据当前句型的长度来决定该派生是否需要继续进行下去 。
这样一来,对于一个给定的输入字符串,
如果它不是 L(G)的句子,我们构造的 TM可能会陷入用不停机的工作过程中 。 这从另一方面说明,短语结构语言不一定是递归语言 。
2009-7-26 842
10.1 TM与 PSG的等价性定理 10-2 对于任一 TM M,存在 PSGG=(V,T,P,
S),使得 L(G)=L(M)。
证明要点:
① 设 TM M=(Q,∑,Γ,δ,q0,B,F),L=(M)。
② 让 G可以产生 ∑*中的任意一个字符串的变形,然后让 G模拟 M处理这个字符串 。 如果 M接受它,则 G就将此字符串的变形还原成该字符串 。
③ 变形是让每个字符对应一个二元组 。[a1,a1][a2,
a2]… [an,an] ∈ (∑× ∑)*,被看成 a1a2… an的两个副本 。
2009-7-26 843
10.1 TM与 PSG的等价性
④ G在一个副本上模拟 M的识别动作,如果
M进入终止状态,则 G将句型中除另一个副本外的所有字符消去。
G=((∑∪{ ε })× Γ ∪{A 1,A2,A3}∪Q,∑,P,A 1)
(1) A1?q0A2 准备模拟 M从 q0启动;
(2) A2?[a,a]A2
a∈ ∑,A2首先生成任意的形如 [a1,
a1][a2,a2]… [an,an]的串;
2009-7-26 844
10.1 TM与 PSG的等价性
(3) A2? A3
在预生成双副本子串 [a1,a1][a2,
a2]……[a n,an]后,准备用 A3在该子串之后生成一系列的相当于空白符的子串,为 G能够顺利地模拟 M在处理相应的输入字符串的过程中,需要将读头移向输入串右侧的初始为 B的地方做准备;
2009-7-26 845
10.1 TM与 PSG的等价性
(4) A3?[ε,B] A3
由于 M在处理一个字符时,不知道将需要用到输入串右侧的多少个初始为 B的带方格,所以,我们让 A3生成一系列的相当于空白符的子串 [ε,B] [ε,B]…… [ε,B]。在派生过程中,其个数依据实际需要而定;
2009-7-26 846
10.1 TM与 PSG的等价性
(5) A3?ε
(6)?a∈∑∪ {ε },?q,p∈ Q,?X,
Y∈ Γ,如果 δ (q,X)=(p,Y,R),则
– q[a,X]?[a,Y]p
– G模拟 M的一次右移;
2009-7-26 847
10.1 TM与 PSG的等价性
(7) 对于?a,b∈∑∪ {ε },?q,p∈ Q,?X,
Y,Z∈ Γ,如果 δ (q,X)=(p,Y,L),则
– [b,Z]q[a,X]? p[b,Z] [a,Y]
– G模拟 M的一次左移;
(8) 对于?a∈∑∪ {ε },?q∈ F则
– [a,X]q?qaq G先将句型中的 [,],X等消除;
– q[a,X]?qaq
– q?ε 最后再消除句型中的状态 q
2009-7-26 848
10.2 LBA及其与 CSG的等价性
线性有界自动机 (linear bounded
automaton,LBA)
– 非确定的 TM。
– 输入字母表包含两个特殊的符号¢和 $,其中,
¢作为输入符号串的左端标志,$作为输入符号串的右端标志。
– LBA的读头只能在¢和 $之间移动,它不能在端点符号¢和 $上面打印另外一个符号。
2009-7-26 849
10.2 LBA及其与 CSG的等价性
LBA可以被看成一个八元组,
M=(Q,∑,Γ,δ,q0,¢,$,F)
其中,Q,∑,Γ,δ,q0,F与 TM中的定义相同,¢ ∈∑,$∈∑,M接受的语言
L(M)={w | w∈ (∑ -{¢,$})* &? q∈ F使得
q0¢ w$├ *¢ α qβ $。
2009-7-26 850
10.2 LBA及其与 CSG的等价性定理 10-3如果 L的 CSL,ε?L,则存在
LBA M,使得 L=L(M)。
证明要点:
① 设 CSG G=(V,T,P,S),使得 L=L(G)。 。
② 用一个两道 TM模拟 G。 一道存放字符串
¢ w$,另一道用来生成 w的推导 。
2009-7-26 851
LBA及其与 CSG的等价性
③ CSG保证只用考察长度不超过 |w|句型 。
④ 将句型的长度限制在 |w|以内,所以,M的运行不会超出符号 ¢ 和 $规定的范围 。
⑤ 对于任意输入,LBA均会停机,这表明
CSL是递归语言 。
2009-7-26 852
10.2 LBA及其与 CSG的等价性定理 10-4 对于任意 L,ε?L,存在 LBA
M,使得 L=L(M)。则 L是 CSL。
证明:与定理 10-2的证明类似,主要是根据给定的 LBA M构造出 CSG G。这里的双副本串是形如 [a1,q0¢ a1][a2,a2]…[a n,an$]的符号行,
当长度为 1时,此符号行为 [a,q0¢ a$]。
2009-7-26 853
10.2 LBA及其与 CSG的等价性
( 1) 对于?a∈∑ -{¢,$},
A1?[a,q0¢ a]A2
准备模拟 M从 q0启动,生成形如 [a1,
q0¢ a1][a2,a2]…[a n,an$]的双副本串 (句型 )
中的 [a1,q0¢ a1],并将生成子串 [a2,a2]…[a n,
an$]的任务交给 A2;
A1?[a,q0¢ a$]
生成双副本串 [a,q0¢ a$];
2009-7-26 854
10.2 LBA及其与 CSG的等价性
( 2) 对于?a∈∑ -{¢,$},
A2?[a,a]A2
A2首先生成任意的形如 [a1,q0¢ a1][a2,a2]… [an,
an$]的双副本串中的子串 [a2,a2]… [an-1,an-1];
( 3) 对于?a∈∑ -{¢,$},
A2?[a,a$]
A2 最后 生成任 意的形 如 [a1,q0 ¢ a1][a2,
a2]… [an,an$]的双副本中的子串 [an,an$];
2009-7-26 855
10.2 LBA及其与 CSG的等价性
(4) 对于?a∈∑ -{$},?q,p∈ Q,?X,Y,
Z∈ Γ,X≠ $,如果 δ (q,X)=(p,Y,R),则
– [a,q X][b,Z]?[a,Y] [b,p Z]
– G模拟 M的一次右移;
(5) 对于?a,b∈∑ -{¢ },?q,p∈ Q,?X,
Y,Z∈ Γ,如果 δ (q,X)=(p,Y,L),则
– [b,Z] [a,q X]? [b,p Z] [a,Y]
– G模拟 M的一次左移;
2009-7-26 856
10.2 LBA及其与 CSG的等价性
(6) 对于?a∈∑,?q∈ F,?X,Y∈ Γ -{B},
[a,XqY]?a
– 由于 q为终止状态,所以可以消除它
(7) 对于?a∈∑ -{¢,$},?X∈ Γ -{B},
– [a,X]b?ab
– a [b,X]?ab
2009-7-26 857
10.3 小结本章讨论 TM与 PSG的等价性,介绍了识别 CSL的装置 ——LBA。
(1) 对于任一 PSGG=(V,T,P,S),存在
TM M,使得 L(M)=L(G);
(2) 对于任一 TM M,存在 PSGG=(V,T,P,
S),使得 L(G) =L(M);
(3) LBA是一种非确定的 TM,它的输入串被用符号¢和 $括起来,而且读头只能在¢
和 $之间移动;
2009-7-26 858
10.2 LBA及其与 CSG的等价性
(4)如果 L是 CSL,ε?L,则存在 LBA M,
使得 L=L(M);
(5)对于任意 L,ε?L,存在 LBA M,使得
L=L(M),则 L是 CSL。