【计算理论】Pumping 引理 ( 四个等价概念 | 自动机界限 | Pumping 引理简介 | Pumping 引理证明正则表达式 | Pumping 引理示例分析 )
文章目录
- 一、四个等价概念
- 二、自动机界限
- 三、Pumping 引理
- 四、Pumping 引理 示例
- 五、证明 语言 不是正则语言 步骤
- 六、证明 语言 不是正则语言 示例
一、四个等价概念
1 . 正则语言 : 给定一个语言 , 可以自动设计一个识别该语言的 自动机 ; 该语言必须是一个 正则表达式 表达的语言 ;
2 . 正则表达式可以转成自动机 : 先构造 接受单字符自动机 , 然后通过串联 并联 或 星计算 , 拼装成自动机 ; 这个转化成的自动机是非确定性有限自动机 ( NFA ) , NFA 可以转成 确定性有限自动机 ( DFA ) ;
3 . 自动机可以转成正则表达式 : 给定一个自动机 , 逐个删除自动机的状态 , 最后删除到只剩下开始状态 与 接受状态 两个状态 , 开始状态 读取 正则表达式 跳转到接受状态 , 这个正则表达式就是自动机转成的 ;
确定性有限自动机 ( DFA ) 与 非确定性有限自动机 ( NFA ) 等价 , NFA 与 扩展型的非确定性有限自动机 ( GNFA ) 是等价的 , GNFA 可以写成正则表达式语言 ( 正则语言 ) ;
上述 DFA , NFA , GNFA , 正则语言 概念是等价的 ;
二、自动机界限
1 . 自动机界限 : 自动机 不是万能的 , 它有一个界限 , 有的语言自动机可以识别 , 有的语言自动机无法识别 , 这样就需要给有限自动机确定一个界限 ;
2 . 判断语言是否能被自动机识别 : 如何判定一个语言是否是自动机能识别的语言 , 只需要判定该语言是否是正则语言即可 ;
① 语言是正则语言 : 如果该语言是正则语言 , 那么该语言就可以被自动机识别 ;
② 语言不是正则语言 : 如果该语言不是正则语言 , 那么该语言不能被自动机识别 ;
3 . 引入 Pumping 引理 : 如何判定语言是否是正则语言 , 这里使用 Pumping 引理 , 可以判定一个语言是否是正则语言 ;
三、Pumping 引理
Pumping 引理 :
① 正则语言 : AAA 是正则语言 ;
② 数字 : 存在数字 ppp , 这个 ppp 叫做 Pumping 长度 ;
③ 字符串 : sss 是 AAA 语言中的字符串 , 其长度大于等于 ppp ; ( 字符串两个要求 )
④ 字符串分组及要求 : sss 可以分为三个部分 , s=xyzs = xyzs=xyz , 满足如下要求 :
- xyiz∈A(i≥0)xy^iz \in A \quad ( i \geq 0 )xyiz∈A(i≥0) : iii 表示中间的 yyy 的重复次数 ;
- ∣y∣>0|y| > 0∣y∣>0 : yyy 是中间重复的部分 , 星计算部分 ;
- ∣xy∣≤p|xy| \leq p∣xy∣≤p
四、Pumping 引理 示例
1 . 正则语言 与 自动机 等价 : 如果语言 AAA 是正则语言 , 该语言可以被有限自动机识别 ;
2 . 已知的语言 : AAA 语言的字符串 s=s1s2s3s4s5s6⋯sns = s_1 \; s_2 \; s_3 \; s_4 \; s_5 \; s_6 \; \cdots \; s_n \;s=s1s2s3s4s5s6⋯sn , 字符串的长度为 nnn ;
3 . Pumping 引理中的字符串有两个要求 :
① 长度要求 : 长度 nnn 大于等于 Pumping 长度 ppp ;
② 语言要求 : 字符串属于语言 AAA ;
4 . 假设 : 上述字符串可以被下面的自动机接受 ;
5 . 将上述字符串 sss 输入到自动机中进行计算 :
q1q_1q1 是自动机的开始状态 , 读取 s1s_1s1 字符 , 就会跳转到 q3q_3q3 状态 ;
q3q_3q3 状态下 , 读取 s2s_2s2 字符 , 就会跳转到 q20q_{20}q20 状态 ;
q20q_{20}q20 状态下 , 读取 s3s_3s3 字符 , 就会跳转到 q9q_{9}q9 状态 ;
q9q_{9}q9 状态下 , 读取 s4s_4s4 字符 , 就会跳转到 q17q_{17}q17 状态 ;
q17q_{17}q17 状态下 , 读取 s5s_5s5 字符 , 就会跳转到 q9q_{9}q9 状态 ;
⋮\vdots⋮
q..q_{..}q.. 状态下 , 读取 sns_nsn 字符 , 就会跳转到 q13q_{13}q13 状态 ;
6 . 重复状态说明 : 字符串 sss 的长度是大于 字符串输入 自动机 过程中经过的状态个数的 , 中间肯定有重复的状态 ;
① 这个重复的状态是 q9q_9q9 ;
② 将两个 q9q_9q9 中间的部分 s4s5s_4 s_5s4s5 再重复几遍 , 该字符串仍然可以被接受 ;
上图就是 sss 字符串中的 xyzxyzxyz 三部分 , 其中的 yyy 部分可以无限重复 ;
五、证明 语言 不是正则语言 步骤
证明步骤 : 使用 反正法 进行证明 ;
① 提出假设 : 首先假设该语言是正则的 ;
② Pumping 引理证明 : 存在长度至少为 ppp 的任何字符串 , 都满足 Pumping 引理 的三个性质 ;
③ 矛盾 假设不成立 : 如果不满足 Pumping 引理 , 说明上面假设该语言是正则语言 是不成立的 , 该语言不是正则语言 ;
六、证明 语言 不是正则语言 示例
证明 : {0n1n:n≥0}\{ 0^n 1^n : n \geq 0 \}{0n1n:n≥0} 语言 不是正则语言 ;
提出假设 : 假设 {0n1n:n≥0}\{ 0^n 1^n : n \geq 0 \}{0n1n:n≥0} 语言是正则语言 ;
引用 Pumping 引理 , 看上述语言是否符合该 Pumping 引理 ;
Pumping 长度 : 存在一个数字 ppp ( Pumping 长度 ) , 使得任何长度至少为 ppp 的字符串 , 并且该字符串属于 {0n1n:n≥0}\{ 0^n 1^n : n \geq 0 \}{0n1n:n≥0} 语言 ;
满足 Pumping 引理 的三个条件 :
- xyiz∈A(i≥0)xy^iz \in A \quad ( i \geq 0 )xyiz∈A(i≥0)
- ∣y∣>0|y| > 0∣y∣>0
- ∣xy∣≤p|xy| \leq p∣xy∣≤p
如果所有的字符串都满足上述上个条件 , 说明该语言是正则语言 , 如果找出了一个字符串不满足上述条件 , 该语言就不是正则语言 ;
按照上述提出的证明步骤 , 证明该字符串不是正则表达式 ;
1 . 选择反例字符串 : 目的是证明 正则表达式不成立 , 选择的是反例 ;
① 反例选择 : 选择字符串 s=0p1ps = 0^p 1^ps=0p1p , 该字符串有 ppp 个 000 和 ppp 个 111 字符组成 ;
② Pumping 引理条件 : 将上述字符串分成 s=xyzs = xyzs=xyz 三个部分 , 看是否满足 Pumping 引理的三个条件 ;
2 . yyy 出现三种情况 :
- yyy 全部由 000 组成
- yyy 全部由 111 组成
- yyy 全部由 0,10,10,1 组成 ;
如果上述每种情况都出现矛盾 , 说明假设不成立 ;
3 . yyy 全部由 000 组成 情况分析 :
① 假设 : 假设 yyy 全部由 000 组成 , 其不停的重复 , 得到的新字符串 , 仍然属于 AAA 语言 ;
② yyy 重复后不符合要求 : 但是 000 重复若干次之后 , 000 的个数就大于 111 的个数了 , 此时不符合 s=0p1ps = 0^p 1^ps=0p1p 要求了 , 因此这种情况不成立 ;
4 . yyy 全部由 111 组成 情况分析 :
① 假设 : 假设 yyy 全部由 111 组成 , 其不停的重复 , 得到的新字符串 , 仍然属于 AAA 语言 ;
② yyy 重复后不符合要求 : 但是 111 重复若干次之后 , 111 的个数就大于 000 的个数了 , 此时不符合 s=0p1ps = 0^p 1^ps=0p1p 要求了 , 因此这种情况不成立 ;
5 . yyy 全部由 0,10,10,1 组成 情况分析 :
① 假设 : 假设 yyy 全部由 0,10,10,1 组成 , 其不停的重复 , 得到的新字符串 , 仍然属于 AAA 语言 ;
② yyy 重复后不符合要求 : 但是 0,10,10,1 重复若干次之后 , 就会打乱 s=0p1ps = 0^p 1^ps=0p1p 字符串中 0,10,10,1 的相互顺序 , 其中 0,10,10,1 不能存在交叉 , 因此这种情况不成立 ;
经过上述讨论 , yyy 的三种情况都不符合 Pumping 引理 , 因此 {0n1n:n≥0}\{ 0^n 1^n : n \geq 0 \}{0n1n:n≥0} 语言不是正则语言 ;
《新程序员》:云原生和全面数字化实践50位技术专家共同创作,文字、视频、音频交互阅读总结
以上是生活随笔为你收集整理的【计算理论】Pumping 引理 ( 四个等价概念 | 自动机界限 | Pumping 引理简介 | Pumping 引理证明正则表达式 | Pumping 引理示例分析 )的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 【计算理论】正则语言 ( 推广型的非确定
- 下一篇: 【计算理论】上下文无关语法 ( 语法组成