You are on page 1of 84

形式语言与自动机

Formal Languages and Automata Theory

正则语言的性质
计算机科学与技术学院
哈尔滨工业大学(深
圳)

汤步洲
问题: Regular or Nonregular

• 如何判定一个语言是否是正则语言 (Regular
Language) ?

• 一个正则语言可以有多种描述形式,能否找到最
小的一个 DFA ?
主要内容

• 正则语言的泵引理
• 正则语言的封闭性
• 正则语言的判定性质
• 自动机的最小化
主要内容

• 正则语言的泵引理
• 正则语言的封闭性
• 正则语言的判定性质
• 自动机的最小化
正则语言的证明

• 思考:如何证明一个语言 L 不是正则语言?
证明没有任何一个 DFA 或 NFA 或 RE 能够接
受L

• 难点:实现困难,需要证明无数 DFA/NFA/RE

• 解决方法:使用泵引理( Pumping Lemma )


鸽巢原理
• 在学习泵引理之前,我们首先学习鸽巢原理。

4 只鸽子

3 个鸽巢
鸽巢原理

• 如果要把每只鸽子都放到鸽巢中,那么必定有一
个鸽巢中存在至少两只鸽子。
鸽巢原理
n 只鸽子
必定有一个鸽巢中
m 个鸽巢 存在至少两只鸽子

nm

...........

有限状态、无限字符串的情况下,
会是什么情况呢?
正则语言的泵引理

• 泵引理 (pumping lemma): 如果语言是正则的,


那么存在正整数 , 对 , 只要 , 就可以将分为三
部分 满足 :
– (或) ;

–;
• 中间的串不论循环几次,所得的串仍属于该正则语言。
泵引理的证明
• 如果正则 , 那么存在有个状态 DFA 使 ;
• 取 , 定义 ;

• 当输入的前个字符时,经过的状态分别有 (N+1 个
状态 )
泵引理的证明
• 如果正则 , 那么存在有个状态 DFA 使;
• 取 , 定义 ;

• 当输入的前个字符时,经过的状态分别有 (N+1 个
状态 )
• 因为 DFA 只有个状态,由鸽巢原理 (pigeonhole
principle), 所到达的状态必有两个相同
– 鸽巢原理 : 只鸽子飞入个巢,则至少有一个巢有不少
于两只鸽子。
泵引理的证明
• 不妨设
• 根据和 , 可以把这个路径如图分为三段,分别
是 ,,
– 一段从开始,经过,到达
– 然后经过,到达,因,所以实际到达
– 最后经过,到达
泵引理的证明

• ;
– 在处做循环
• 因为 ,和之间至少有一个字符,故 ( 即 ) ;
• 因为 所以 。
泵引理的解释

• 泵引理的解释:任何从开始状态到接受状态的路
径 , 如果长度超过,一定会经过个状态,必定有
一个重复状态,因此会形成一个循环 (loop) ;
那么,这个循环可以被重复多次后,沿原路径还
会到达接收状态。
• 泵引理可以用来确定特定语言不是正则语言,泵
引理成立是正则语言判定的必要条件,但不是充
分条件
泵引理的解释

• 泵引理趣解:有个啰嗦的老太婆,脑袋里面只有
n 个论点,上台发言的时候说“下面我讲 m 个意
见”,当 m>n 时,至少有一个地方在打圈(发言
激动时尤其如此)(言多必失)。
– 正则语言就是通过打圈,来描述(有某种规律
的)无限集合
泵引理的应用示例

• 例 1: 证明不是正则语言。
• 证明:假设是正则的 ,
– 那么一定存在正整数对 () 满足泵引理。
泵引理的应用示例

• 例 1: 证明不是正则语言。
• 证明:假设是正则的 ,
– 那么一定存在正整数对 () 满足泵引理。
– 从中取,显然 , 且
泵引理的应用示例

• 例 1: 证明不是正则语言。
• 证明:假设是正则的 ,
– 那么一定存在正整数对 () 满足泵引理。
– 从中取,显然 , 且
– 那么 , 可被分为,且。
泵引理的应用示例
• 例 1: 证明不是正则语言。
• 证明:假设是正则的 ,
– 那么一定存在正整数对 () 满足泵引理。
– 从中取,显然 , 且
– 那么 , 可被分为,且。
– 因此,只能是且。
– 那么,而由泵引理,,矛盾。
所以假设不成立, 不是正则的。
主观题 10 分

例 2: 证明 Leq={w| w 由数量相等
的 0 和 1 构成 } 不是正则语言

作答
泵引理的应用示例

• 例 2: 证明 Leq={w| w 由数量相等的 0 和 1 构成 } 不
是正则语言
• 证明:假设是正则的 ,
– 那么一定存在正整数对 () 满足泵引理。
泵引理的应用示例

• 例 2: 证明 Leq={w| w 由数量相等的 0 和 1 构成 } 不
是正则语言
• 证明:假设是正则的 ,
– 那么一定存在正整数对 () 满足泵引理。
– 取 w=0N1N∈Leq ,因为 |w|=2N>N ,则有 w=xyz ,
且 |xy|≤N 和;那么 y 一定是 0m(m=|y|>0) ;
– 那么 xy2z=xy2z=0N+m1NLeq ,根据泵引理 xy2zLeq ,
与假设矛盾;
因此, Leq 一定不是正则的。
主观题 10 分

例 3: 证明不是正则的。

作答
泵引理的应用示例
• 例 3: 证明不是正则的。
• 证明 : 假设是正则的
– 那么一定存在正整数对 () 满足泵引理。
泵引理的应用示例

• 例 3: 证明不是正则的。
• 证明 : 假设是正则的
– 那么一定存在正整数对 () 满足泵引理。
– 从中取,显然 , 且
泵引理的应用示例
• 例 3: 证明不是正则的。
• 证明 : 假设是正则的
– 那么一定存在正整数对 () 满足泵引理。
– 从中取,显然 , 且
– 那么 , 可被分为,且。
– 因此,只能是且
– 那么 , ,因为,而由泵引理, ,矛盾。
所以假设不成立,不是正则的。
主观题 10 分

例 4: 证明不是正则的。

作答
泵引理的应用示例

• 例 4: 证明不是正则的。
证明:假设是正则的
– 那么一定存在正整数对 () 满足泵引理。
泵引理的应用示例

• 例 4: 证明不是正则的。
证明:假设是正则的
– 那么一定存在正整数对 () 满足泵引理。
– 从中取,显然 , 且
– 那么 , 可被分为,且 。
– 因此,只能是且。
– 那么 , ,因为,所以不属于,而由泵引理, ,矛盾。
所以假设不成立,不是正则的。
泵引理的应用示例

• 例 5: 有限的语言,比如∅, {00, 11} , {0n1n | 0≤n≤100} 是


否满足泵引理?
泵引理的应用示例

• 例 5: 有限的语言,比如∅, {00, 11} , {0n1n | 0≤n≤100} 是


否满足泵引理?

结论:有限的语言必定是正则语言( why ?),满足泵引理。


证明:取 N 为有限语言最长字符串长度加 1 ,不存在 w∈L(|w|
≥N) 。
主要内容

• 正则语言的泵引理
• 正则语言的封闭性
• 正则语言的判定性质
• 自动机的最小化
正则语言的封闭性
• 正则语言经某些运算后得到的新语言仍保持正则,
称正则语言在这些运算下封闭。
• 正则语言和,在这些运算下封闭 :
– 并 : ,连接 : ,闭包 :
– 交:
– 反转 :
– 同态 :
– 逆同态 :
– 补:
– 差:
并 / 连接 / 闭包的封闭性

• 定理 : 正则语言在并,连接和闭包运算下保
持封闭。
• 证明 : 由正则表达式的定义得证。
– 比如说,和如果是正则语言,那么一定存在
正则表达式和去表示它们,即
–则,,
主观题 10 分

定理 : 如果是 上的正则语言 , 那么也是正则


的。 ( 求补就是把对应的字符串从中去掉。)
思考:如何证明?

作答
补运算封闭性
• 定理 : 如果是 上的正则语言 , 那么也是正则的。 ( 求
补就是把对应的字符串从中去掉。)
• 证明 : 设接受语言 的 DFA
即 构造 DFA ,即把的所有终止符改成非终止符,非终止符
改成终止符。

• 则有 ,
因为
主观题 10 分

回顾一下,字母集 {0, 1} 上两个特殊语言 ϕ 和


{ε} ,它们的补集是: (0+1)* 和 (0+1)+ ,对应的
DFA 是?
0,1
0,1
start 𝑞0 start qq0 0,1
0 q1

的 DFA: 无接受状态,即该 DFA {} 的


不接受任何符号串(包括空 DFA 。
串)。

作答
补运算封闭性应用示例

• 例:证明 , 不是正则的。
– 由泵引理很难直接证明不是正则的,无论如何
取,都无法将其打断为形式,并利用产生不属
于的串。
– 而证明不是正则的很容易证明 ( 当然 , 前面已
经证明 ) 。
– 根据补运算的封闭性,不是正则的。
交运算的封闭性

• 定理:如果和是正则语言,那么也是正则语言。
• 证明 1: 由。
• 证明 2 :通过 DFA 构造来证明。
交运算的封闭性

• 定理:若 DFA , 和 的定义如下

其中 , ,即 :

则对任意 ,
即,到达的状态,和和组成的二元组是相等的。
交运算的封闭性
• 证明:通过对的归纳来证明
归纳基础 : 当时,

同理

假设的时候成立,
归纳递推:当时,
的定义

归纳假设

的构造

的定义
交运算的封闭性

• 定理:如果和是正则语言,那么也是正则语言。
• 证明 2 :由上一个定理构造的 , 则对
交运算的封闭性

• 示例: L1={ 由 {0,1} 组成的至少含有一个 0 的字


符串 }
L2={ 由 {0,1} 组成的至少含有一个 1 的字符串 }
求 L1ՈL2
交运算的封闭性

• 示例: L1={ 由 {0,1} 组成的至少含有一个 0 的字


符串 }
L2={ 由 {0,1} 组成的至少含有一个 1 的字符串 }
求 L1ՈL2
L1 : 1*0(0+1)*

L2 : 0*1(0+1)*

0 1 0 1
pr qr ps ps qs ps
L1ՈL2
qr qr qs qs *qs qs
交运算的封闭性

• 例:如果已知语言不是正则的 , 请用封闭性证明
语言也不是正则的。
• 证明:
– 首先 , 因为是正则语言 ;
–而 ;
– 如果 是正则的 , 必然也是正则的 ;
– 因为已知 不是正则的 , 所以 一定不是正则的
单选题 1分

例 : 如果 和 都不是正则的 , 那
么一定不是正则的吗 ?
A 对

B 错

提交
交运算的封闭性

例 : 如果 和 都不是正则的 , 那
么一定不是正则的吗 ?
交运算的封闭性

• 例 : 如果 和 都不是正则的 , 那么一定不是正则的
吗?
• 不一定 . 因为 , 如果令

• 显然两者都不算正则语言,但

是正则语言。
差运算封闭性

• 定理 : 如果 和 都是正则语言 , 那么 也是正则
的.
• 证明
反转运算的封闭性

• 定义:字符串的反转,记为,定义为

• 语言的反转,记为,定义为
反转运算的封闭性

• 定理:如果是正则语言,那么也是正则的。
• 证明 1 :假设是由正则表达式描述的语言,对进
行归纳。

归纳基础:如果分别是,或,则, ,
反转运算的封闭性

归纳递推:如果存在两个正则表达式和满足和是正
则语言,则

1) ,是正则语言

2 )是正则语言

3 )是正则语言
反转运算的封闭性

• 证明 2 :构造的 NFA 。
• 由识别的 DFA 构造识别 的
• 1 将的初始状态 , 改为唯一的接受状态 ;
• 2 将的边调转方向 : 如果 , 那么 ;
• 3 新增初始状态 , 且令 ;
同态

• 定义 : 若 和是两个字母表 , 同态定义为函数
(即将上的一个符号映射为上的符号串)

• 扩展的定义到字符串 ,

• 再扩展到语言 , 对 ,
填空题 2分

例 : 若由 到的同态函数 为 , 则上的字符串
0011, 在的作用下
= [ 填空 1]
语言 , 在的作用下 , 为 :
[ 填空 2]

作答
同态

• 例 : 若由 到的同态函数 为 , 则上的字符串
0011, 在的作用下

• 语言 , 在的作用下 , 为:
同态的封闭性

• 定理 : 若 是字母表上的正则语言 , 是 Σ 上的
同态 , 则 也是正则的。
同态的封闭性

• 若的正则表达式为 , 即 , 按如下规则构造表达

• 往证 而显然也是正则表达式 , 因此正则。
同态的封闭性
• 证明 :
归纳基础 :
同态的封闭性

• 归纳递推 : 假设对正则表达式 , 分别有


逆同态定义

• 定义 : 若 是字母表 到 的同态 , 且 是上的


语言 , 那么使 的 () 的集合 , 称为语言 的逆 ,
记为

同态原像 同态像
逆同态的封闭性

• 定理:如果是字母表到字母表的同态,是上的
正则语言,那么也是正则语言。
逆同态的封闭性

• 证明 : 由 的 DFA , 构造识别的 DFA

上字符串

• 将 A 整个放入 B 的控制器中,将其输入带看作 B 控制器中的一个缓冲


区;
• B 每次读入一个字符,在的作用下映射为 A 输入带的一个字符串 ;
• A 扫描当前该字符串,进行状态转移 ;
• B 扫描完整个字符串, A 所加载的字符串就是的原像 ,;
• 若 A 接受 , 则 B 接受。让 B 的接受状态等于 A 接受状态即可。
逆同态的封闭性

• 证明 : 由 的 DFA , 构造识别的 DFA

• 读入一个字符,相当于读入一个字符串,因此的
可由的定义:
逆同态的封闭性

• 为证明 , 先证明 , 。

由 的 DFA , 构造识别的 DFA


逆同态的封闭性

• 对 归纳 , 往证
• 归纳基础 : 若 ,
• 归纳递推:若 ,

的定义
归纳假设
构造
(DFA 中 )
同态作用

由 的 DFA , 构造识别的 DFA


逆同态的封闭性

• 已证 = 。
• 所以
– 即被接受当且仅当被接受 , 是识别的 DFA 。
• 因此是正则的。

由 的 DFA , 构造识别的 DFA


主要内容

• 正则语言的泵引理
• 正则语言的封闭性
• 正则语言的判定性质
• 自动机的最小化
正则语言的判定性质

• 正则语言 , 或任何语言 , 典型的 3 个判定问题 :


– 以某种形式化模型描述的语言是否为空 ? 是否
无穷 ?
– 某个特定的串是否属于所描述的语言 ?
– 以两种方式描述的语言 , 是否是相同的 ? — 语
言的等价性。
• 我们想知道的是,回答这类问题的具体算法,是
否存在。
空性 , 有穷性和无穷性

• 定理 : 具有个状态的有穷自动机接受的集合 :
– S 是非空的,当且仅当接受某个长度小于的串 ;
– S 是无穷的 , 当且仅当接受某个长度为的串 ,
• 所以,对于正则语言 :
– 存在算法 , 判断其是否为空 , 只需检查全部长
度小于的串 ;
– 存在算法 , 判断其是否无穷 , 只需检查全部长
度由 到的串。
空性 , 有穷性和无穷性

• ( 1 )证明 : 必要性 : 显然成立。充分性:


– 如果非空,设是接受的串中长度最小者之一;
– 必然 , 否则由泵引理 , 接受更短。
• ( 2 )证明 : 必要性:由泵引理,显然成立。充分性 :
– 如果无穷 , 假设没有长度到之间的串 ;
– 那么取 是长度 中最小者之一 ;
– 由泵引理 , 且会接受更短的串 ;
– 于是 , 或者不是长度最小的 , 或者长度 到 之间有
被接受的串 ,
– 因此假设不成立。
正则语言的等价性

• 定理 : 存在算法,判定两个有穷自动机是否等价
(接受语言相同)。
• 证明 :
– 设和是分别接受和的有穷自动机 ;
– 则是正则的 , 所以可被某个有穷自动机接受 ;
– 而接受某个串 , 当且仅当 ;
– 由于存在算法判断是否为空 , 因此得证。
主要内容

• 正则语言的泵引理
• 正则语言的封闭性
• 正则语言的判定性质
• 自动机的最小化
状态的等价性

• 定义 : DFA 中两个状态 和,对 :

则称这两个状态是等价的 , 否则称为可区分的。
即,从开始而被接受的串 w, 从开始也会被接受。

• 等价性只要求 和 同时在或不在 中 , 而不必是


相同状态。
填表算法

• 填表算法递归寻找 DFA 中全部的可区分状态对 :


– 如果而,则是可区分的;
– ,如果是可区分的,则是可区分的。
填表算法
• 例 : 用填表算法找到如图 DFA 中全部可区分状态对。
填表算法
• 例 : 用填表算法找到如图 DFA 中全部可区分状态对。

(1) 直接标记终态和非终态之间的状态对 :
填表算法
• 例 : 用填表算法找到如图 DFA 中全部可区分状态对。

(2) 标记所有经过字符 0 到达终态和非终态的状态对 :


填表算法
• 例 : 用填表算法找到如图 DFA 中全部可区分状态对。

(3) 标记所有经过字符 1 到达终态和非终态的状态对 :


填表算法
• 例 : 用填表算法找到如图 DFA 中全部可区分状态对。

(4) 此时还有未标记,只需逐个检查。
填表算法
• 例 : 用填表算法找到如图 DFA 中全部可区分状态对。

(4) 此时还有未标记,只需逐个检查。
- 是可区分的,因为经串 0 到可区分的
- 是可区分的,因为经串 0 到可区分的
填表算法
• 例 : 用填表算法找到如图 DFA 中全部可区分状态对。

(5 )而在经过很短的字符串后,都会到达相同状态,因此都
是等价的。
DFA 最小化
• 根据填表算法取得的 DFA A 状态间等价性,将状态集进
行划分,得到不同的块;利用块构造新的 DFA ,的开始
状态的为包含初始状态的块,的接受状态为包含的接受状
态的块,转移函数为块之间的转移;则是的最小化
DFA 。
• 续上例,构造其最小化的 DFA 。
– (注意 : 不能使用同样的方法最小化 NFA )
小结

• 正则语言的泵引理。
• 正则语言对有关运算的封闭性。
– RL 在并、乘、闭包、补、交、同态映射运算
下是有效封闭的。 RL 的同态原像是 RL 。
• 状态等价性和最小化 DFA 。

You might also like