泵引理
- 上下文无关语言应满足的一个必要条件
- 可用于判定某些语言不是上下文无关语言
引理
有一个对应于 CNF 的语法分析树,且该树产物为 。若最长的路径长度为 ,则
Proof
基础:,显然 归纳:根使用的产生式一定是 形式,以 和 为根的子树的最大路径长度小于等于 ,则这两颗子树的产物长度至多为 ,因此整棵树的产物长度至多为
不含 的非空 CFL ,CFG 为 CNF,,设 ,对于任一长度不小于 的字符串 ,考察 的分析树。 设从根节点开始的一条最长路径标记为 ,若 ,则 ,但 ,因此该分析树高度至少为 ,因此 。 由鸽巢原理,设 ,其中 将 划分为 , 由 的子树产生, 由 产生。由于没有单位产生式,,因为 的子树高度不超过 所以 的长度不超过 。
Pumping 特性
对任意的
直观上,产生式需包含
因此会产生递归,第二个产生式可以递归 次,得到
泵引理
是 CFL,则存在正常数 ,使得任一长度不小于 的字符串 ,都可以分成 5 部分, 满足:
- 对任意 ,有
Proof
若 ,成立 否则,设 CFG 为一个 CNF,取 即可
可用于证明 不是 CFL:
- 考虑任一
- 找到一个满足以下条件的
- 找到一个 ,使得
Example
若是 CFL,设 为泵引理得到的常数,考虑串 观察到 不能同时包含 0 和 2,因为 若 中没有 2,则 中包含 0 和 1,且至少有其中之一。由泵引理, 应该属于 ,但是 中包含 个 2 和不到 个的 0 或 1 若 中没有 0,同理
Example
取 , 若 含一种符号,则 至多含三种符号,若 含两种符号,则 含两种符号,总有
Example
取 ,由于 ,则 若 在前 个 0 中,设 包含 个 0,则 以 开头。,若 ,则 ,因此 一定在第一段 1 后结束,不能重复。 若 跨越了第一段 0 和第一段 1,设 中包含 个 0 和 个 1,则 以 开头。 ,若 ,则 ,矛盾 其余情况类似。
封闭运算
替换
为语言的集合,,
若 为 上的 CFL,对任何 , 为 CFL,则 为 CFL。
并
若 和 为 CFL,则 为 CFL 可用替换证明
交、补、差
- ! CFL 间的交、补、差不一定是 CFL 反例: , 为 CFL,但 不为 CFL
与正规语言的交
若 为 CFL, 为正规语言,则 为 CFL 课通过构造 PDA 证明
闭包
若 为 CFL,则 和 也为 CFL
连接
若 和 为 CFL,则 为 CFL
反转
若 为 CFL,则 为 CFL
同态
映射 ,若 为 CFL,则 为 CFL
Example
证明 不是 CFL 若是, 为 CFL,设 ,则
为 CFL,矛盾。
逆同态
若 为 CFL,则 为 CFL
CFL 的判定性质
是否为空
- 计算生成符号集
- 判定 是否为生成符号 时间复杂度为
是否包含某串
- 将文法变换为 Chomsky 范式
- 用 CYK 算法进行判定 CYK 算法时间复杂度为
CYK 算法
- 为可以推导出 的变元的集合
- 从下往上填表处理
- 若 为产生式,则
- 时, 当且仅当存在 ,有 和 且 为产生式
Example
判定 是否生成无限多个串 设 G 中非终结符的数量为 ,令 ,枚举所有长度满足 的串 并判定 是否属于 ,若存在这样的串,则 是无限的,否则是有限的。
若找到了这样的 ,则根据泵引理,,可以通过重复 和 来让串的长度无限伸长, 是无限的。 若 是无限的,设 为 中满足 的最短的串,则 且 ,若 ,则 且 ,与 为最短的串矛盾。因此总能找到 的串,从而被算法判定为无限的。