上下文无关语言的性质
穿透 CFL 的能力边界:泵引理、封闭性、可判定性,一次搞透
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
上下文无关语言的性质
穿透 CFL 的能力边界:泵引理、封闭性、可判定性,一次搞透
CFL的必要条件回顾
我们已经认识了两类机器——DFA 只能沿输入带前进,PDA 多了一个可推可弹的栈。既然 PDA 是「带栈的升级版」,那原来 DFA 能做的事,PDA 还能做吗?
学生有「超能力」但可以选择不用,至少做不出原来能做的题
泵引理的核心思想
上一页梳理了CFL的必要条件,但满足必要条件≠是CFL。要一锤否定一个语言不是CFL,需要泵引理。它为什么能做到?核心藏在语法树的「高度」上。
岗位就那几个,层级多了同一岗位必然在两条层级链上重复出现
泵引理的形式化表述
泵引理把CFL的「能拆能泵」拆成五个变量和一个保证。
泵引理的图示解释
树形结构视角:证明存在重复的变量推导
用泵引理证明非CFL
用泵引理证非CFL,分三步完成反证。
泵引理证明实例:anbncn
把泵长 p 直接设成 n,穷举候选串 aⁿbⁿcⁿ 的合法泵分拆并检查 i=0。
令 n=p 后,三个符号块都达到长度上界;程序穷举 u、v、w、x、y。删去 v、x 后字符计数不可能相等,因此任意正整数 p 都不是泵长度。
泵引理自测
关于「任意非上下文无关语言都能用泵引理证明它不是 CFL」这一论断,下列分析正确的是?
闭包性概述
泵引理判定『不是 CFL』,是排除法。换个角度:对 CFL 做某个运算,结果仍属于 CFL 吗?这就是闭包性问题,也是正则语言与 CFL 区别最显眼的地方。
各自点菜都行;但找『两份菜单共同的菜』,反而可能凑不出
闭包性全景图
看图:从左侧 CFL 输入出发,经五种操作后全部汇入「结果仍为 CFL」——五条路径全封闭。
并集闭包的构造证明
证明并集封闭的关键一招:让一个新符号同时牵出两套文法。
连接与Kleene星闭包
连接与星闭包都靠构造新文法:把已有产生式稍作改造,就能让新文法产生拼接或迭代后的语言。
CFL不封闭的运算
交运算与补运算:CFL的边界在哪里
闭包性质自测
设L1={a^n b^n c^m | n,m≥1}, L2={a^m b^n c^n | n,m≥1}。L1∩L2仍是CFL吗?
同态的定义
闭包自测里我们用过并、连接、星这些 CFL 封闭的运算。还有一类更强的运算——同态:把每个符号替换成一段字符串,结果仍是 CFL。先把定义钉牢。
每个英文字母对应一段译文,整词按字母顺序逐个查表再拼起来
同态保持CFL的证明
通过三步构造,把CFL在同态下的像也写成CFL。
逆同态的定义
上页把 CFL 沿 h 正向送出,得到仍是 CFL 的 h(L);现在站到输入端,反查哪些原串的像会落进 L。
扫入目标条码组的所有包裹,就是这组条码的逆像;相同条码的包裹成组保留。
逆同态保持CFL的证明
构造一台PDA,用非确定性逐符号模拟h(x)的展开,让栈操作与原PDA同步。
同态应用实例
用 Python 演示 h(a)=01、h(b)=10 对 L={aⁿbⁿ} 的逐字符替换过程。
字典 H 给出同态映射;h 函数逐字符查表拼接;循环把 L 中每个串变成 (01)ⁿ(10)ⁿ,结果仍由 CFG 产生。
CFL与正则语言的交
前面闭包性把问题变成一个现场:让 PDA 抱着栈经过有限状态门禁,筛选之后,栈结构还在吗?
PDA 像抱着的文件夹,DFA 像门禁规则;两边都放行才接收。
PDA与DFA的乘积构造
图分三行读:上行 PDA 带栈、中行 DFA 无栈、下行是两机的乘积。读同一符号时两机同步转移。
CFL的判定性问题
前面花了不少篇幅在构造证明——构造 PDA、文法,证明 CFL 满足或不满足某些性质。现在换个角度:给定一个 CFG,能用算法回答它哪些问题?这一页聚焦三大经典判定。
成员性=查某词在不在;空性=词典是否全空;有限性=收录词数是否有限
成员性问题的CYK算法
先化简语法,再自底向上填表,看起始符能否推出整个串。
CFL vs CSL:判定性对比
CSL 比 CFL 表达力更强,但更强的是存储与改写能力,并非成员性判定;真正边界出现在空性和有限性。
- 成员性:CYK,可在多项式时间判定
- 空性:是否至少生成一个串,可判定
- 有限性:是否含无限多个串,可判定
- 模型:CFG 生成语言,PDA 接收语言
- 成员性:搜索有限配置图,可判定
- 空性:是否存在接受计算,不可判定
- 有限性:是否含无限多个串,不可判定
- 模型:CSG 生成语言,LBA 接收语言
判定性质综合测试
下列关于上下文无关语言(CFL)判定问题的说法,哪一项正确?
CFL性质全景总结
- ✓泵引理是必要条件,不是充分判据
- ✓并、连接、星号及同态、逆同态均保持CFL
- ✓CFL与正则语言交仍为CFL;一般CFL的交不必CFL
- ✓CYK判定成员性;空性也可判定,但等价性等不可判定
深入思考题
课后花十分钟独立思考这三个问题,再对照参考答案——有些结论比直觉更微妙。
参考答案泵引理只刻画CFL'必须满足'的性质,不刻画'满足的就是CFL'。存在满足泵引理但涉及交叉依赖的语言不是CFL——这正是Ogden引理要补的漏洞。
参考答案先看直觉:运算若'保持结构',尝试构造PDA修改版本;若'产生交叉依赖',用泵引理找反例。关键信号是长度关系是否被改变。
参考答案标准泵引理要求串中所有字符都可泵,但很多非CFL的'病态'集中在少数位置。改进方向:允许只标记'重要位置',在更细粒度上施加泵约束——这正是Ogden引理的思路。