【计算理论】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 引理 :


① 正则语言 : A A A 是正则语言 ;

② 数字 : 存在数字 p p p , 这个 p p p 叫做 Pumping 长度 ;

③ 字符串 : s s s A A A 语言中的字符串 , 其长度大于等于 p p p ; ( 字符串两个要求 )

④ 字符串分组及要求 : s s s 可以分为三个部分 , s = x y z s = xyz s=xyz , 满足如下要求 :

  • x y i z ∈ A ( i ≥ 0 ) xy^iz \in A \quad ( i \geq 0 ) xyizA(i0) : i i i 表示中间的 y y y 的重复次数 ;
  • ∣ y ∣ > 0 |y| > 0 y>0 : y y y 是中间重复的部分 , 星计算部分 ;
  • ∣ x y ∣ ≤ p |xy| \leq p xyp




四、Pumping 引理 示例



1 . 正则语言 与 自动机 等价 : 如果语言 A A A 是正则语言 , 该语言可以被有限自动机识别 ;


2 . 已知的语言 : A A A 语言的字符串 s = s 1    s 2    s 3    s 4    s 5    s 6    ⋯    s n    s = s_1 \; s_2 \; s_3 \; s_4 \; s_5 \; s_6 \; \cdots \; s_n \; s=s1s2s3s4s5s6sn , 字符串的长度为 n n n ;


3 . Pumping 引理中的字符串有两个要求 :


① 长度要求 : 长度 n n n 大于等于 Pumping 长度 p p p ;

② 语言要求 : 字符串属于语言 A A A ;


4 . 假设 : 上述字符串可以被下面的自动机接受 ;


5 . 将上述字符串 s s s 输入到自动机中进行计算 :

在这里插入图片描述


q 1 q_1 q1 是自动机的开始状态 , 读取 s 1 s_1 s1 字符 , 就会跳转到 q 3 q_3 q3 状态 ;

q 3 q_3 q3 状态下 , 读取 s 2 s_2 s2 字符 , 就会跳转到 q 20 q_{20} q20 状态 ;

q 20 q_{20} q20 状态下 , 读取 s 3 s_3 s3 字符 , 就会跳转到 q 9 q_{9} q9 状态 ;

q 9 q_{9} q9 状态下 , 读取 s 4 s_4 s4 字符 , 就会跳转到 q 17 q_{17} q17 状态 ;

q 17 q_{17} q17 状态下 , 读取 s 5 s_5 s5 字符 , 就会跳转到 q 9 q_{9} q9 状态 ;

⋮ \vdots

q . . q_{..} q.. 状态下 , 读取 s n s_n sn 字符 , 就会跳转到 q 13 q_{13} q13 状态 ;


6 . 重复状态说明 : 字符串 s s s 的长度是大于 字符串输入 自动机 过程中经过的状态个数的 , 中间肯定有重复的状态 ;


① 这个重复的状态是 q 9 q_9 q9 ;

② 将两个 q 9 q_9 q9 中间的部分 s 4 s 5 s_4 s_5 s4s5 再重复几遍 , 该字符串仍然可以被接受 ;

在这里插入图片描述

上图就是 s s s 字符串中的 x y z xyz xyz 三部分 , 其中的 y y y 部分可以无限重复 ;





五、证明 语言 不是正则语言 步骤



证明步骤 : 使用 反正法 进行证明 ;


① 提出假设 : 首先假设该语言是正则的 ;

② Pumping 引理证明 : 存在长度至少为 p p p 的任何字符串 , 都满足 Pumping 引理 的三个性质 ;

③ 矛盾 假设不成立 : 如果不满足 Pumping 引理 , 说明上面假设该语言是正则语言 是不成立的 , 该语言不是正则语言 ;





六、证明 语言 不是正则语言 示例



证明 : { 0 n 1 n : n ≥ 0 } \{ 0^n 1^n : n \geq 0 \} {0n1n:n0} 语言 不是正则语言 ;


提出假设 : 假设 { 0 n 1 n : n ≥ 0 } \{ 0^n 1^n : n \geq 0 \} {0n1n:n0} 语言是正则语言 ;


引用 Pumping 引理 , 看上述语言是否符合该 Pumping 引理 ;


Pumping 长度 : 存在一个数字 p p p ( Pumping 长度 ) , 使得任何长度至少为 p p p 的字符串 , 并且该字符串属于 { 0 n 1 n : n ≥ 0 } \{ 0^n 1^n : n \geq 0 \} {0n1n:n0} 语言 ;


满足 Pumping 引理 的三个条件 :

  • x y i z ∈ A ( i ≥ 0 ) xy^iz \in A \quad ( i \geq 0 ) xyizA(i0)
  • ∣ y ∣ > 0 |y| > 0 y>0
  • ∣ x y ∣ ≤ p |xy| \leq p xyp

如果所有的字符串都满足上述上个条件 , 说明该语言是正则语言 , 如果找出了一个字符串不满足上述条件 , 该语言就不是正则语言 ;


按照上述提出的证明步骤 , 证明该字符串不是正则表达式 ;


1 . 选择反例字符串 : 目的是证明 正则表达式不成立 , 选择的是反例 ;


① 反例选择 : 选择字符串 s = 0 p 1 p s = 0^p 1^p s=0p1p , 该字符串有 p p p 0 0 0 p p p 1 1 1 字符组成 ;

② Pumping 引理条件 : 将上述字符串分成 s = x y z s = xyz s=xyz 三个部分 , 看是否满足 Pumping 引理的三个条件 ;


2 . y y y 出现三种情况 :

  • y y y 全部由 0 0 0 组成
  • y y y 全部由 1 1 1 组成
  • y y y 全部由 0 , 1 0,1 0,1 组成 ;

如果上述每种情况都出现矛盾 , 说明假设不成立 ;


3 . y y y 全部由 0 0 0 组成 情况分析 :

① 假设 : 假设 y y y 全部由 0 0 0 组成 , 其不停的重复 , 得到的新字符串 , 仍然属于 A A A 语言 ;

y y y 重复后不符合要求 : 但是 0 0 0 重复若干次之后 , 0 0 0 的个数就大于 1 1 1 的个数了 , 此时不符合 s = 0 p 1 p s = 0^p 1^p s=0p1p 要求了 , 因此这种情况不成立 ;


4 . y y y 全部由 1 1 1 组成 情况分析 :

① 假设 : 假设 y y y 全部由 1 1 1 组成 , 其不停的重复 , 得到的新字符串 , 仍然属于 A A A 语言 ;

y y y 重复后不符合要求 : 但是 1 1 1 重复若干次之后 , 1 1 1 的个数就大于 0 0 0 的个数了 , 此时不符合 s = 0 p 1 p s = 0^p 1^p s=0p1p 要求了 , 因此这种情况不成立 ;


5 . y y y 全部由 0 , 1 0,1 0,1 组成 情况分析 :

① 假设 : 假设 y y y 全部由 0 , 1 0,1 0,1 组成 , 其不停的重复 , 得到的新字符串 , 仍然属于 A A A 语言 ;

y y y 重复后不符合要求 : 但是 0 , 1 0,1 0,1 重复若干次之后 , 就会打乱 s = 0 p 1 p s = 0^p 1^p s=0p1p 字符串中 0 , 1 0,1 0,1 的相互顺序 , 其中 0 , 1 0,1 0,1 不能存在交叉 , 因此这种情况不成立 ;


经过上述讨论 , y y y 的三种情况都不符合 Pumping 引理 , 因此 { 0 n 1 n : n ≥ 0 } \{ 0^n 1^n : n \geq 0 \} {0n1n:n0} 语言不是正则语言 ;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值