证明正则语言和上下文无关语言的交集还是一个上下文无关语言
写在前面
首先,默认读者已经了解 DFA/NFA (Finite Automaton) 的概念,及其和 RE (Regular Expression) 的等价性。
其次,默认读者已经了解 PDA (non-deterministic Pushdown Automaton) 的概念,及其和 CFG (Context-free Grammar) 的等价性。
如果你不知道,可以通过列出的全称来查阅相关资料,总之,这里需要频繁用到 DFA=NFA=RE,PDA=CFG 的性质。
问题背景
起因是 JustinRochester 考了我一个问题:
证明,DFA 和 CFG 的交是 CFG
想了想,干脆直接 PDA 同时模拟 DFA 和 CFG 即可,不过我一拍脑袋想的办法,加之没有图示,加上当时前额叶可能还没长出来,说的不清不楚,特此写一篇博客。
引理 1:PDA 可以模拟 DFA/NFA
这个引理是显然的,PDA 其实就是一个带栈的 NFA,不用栈即可。
引理 2:双状态单栈操作的 PDA 和单状态单栈操作的 PDA 等价
这里的名词定义是笔者自己定义的,仅在本文中有效。
单状态单栈操作的 PDA 就是读者所了解的普通的 PDA。
这里引入一个双状态单栈操作的 PDA 的定义,与普通 PDA 的不同仅在,从一个状态扩充到了两个状态,而对栈的操作仍然相同,一次只能做压入/弹出/压入并弹出/无操作。
主要扩充 2 个内容,以及修改一下起始状态和接受状态:
中的每个元素是一个二元组 ,是两个状态; 中的转移是从一个二元组状态经过读取输入和取出栈顶字符后 到 另一个二元组状态并压入字符的过程(注意字符可以是空串 ); 是起始二元组状态; 是一个接受二元组状态集。
下面证明双状态单栈操作的 PDA 与单状态单栈操作的 PDA 等价。
(
这个方向没什么好证的,二元组状态
(
构造 PDA
- 对
中的每个二元组状态 ,在 中有 ; - 对
中的每个转移函数 ,在 中有 ,其中 ; - 对
中的起始二元组状态 ,在 中有起始状态 ; - 对
中的接受二元组状态 ,在 中有接受状态 。
显然,该单状态单栈操作的 PDA 通过扩充状态集就可以模拟双状态单栈操作的 PDA(扩充到
下证:正则语言和上下文无关语言的交集是双状态单栈操作的 PDA 所能接受的语言
即证明:双状态单栈操作的 PDA 可以模拟 DFA 和 PDA 同时运行的结果。
这里有一个前提,就是 DFA 和 PDA 的字符集
对于正则语言 R,存在 DFA
对于上下文无关语言 G,存在 PDA
接下来构造双状态单栈操作的 PDA
- 若状态
, 则 ; - 若状态
, 则 , 其中 且 ; - 若状态
,则 。
显然,此时就相当于同时模拟了 M 和 N,并且 M 和 N 都接受时,S 才接受。
又由引理 2,可知存在一个普通的 PDA 与 S 等价,又已知存在 CFG 与普通 PDA 等价,故正则语言和上下文无关语言的交集仍然是一个上下文无关语言,原命题得证!
后记
这里聪明的读者可能会思考:双状态单栈操作的 PDA 是否也可以模拟 CFL 和 CFL 的交?
我们知道 PDA 不具有封闭性,两台 PDA 就可以模拟 TM (Turing Machine) 了,所能接受的语言大相径庭,而有一个例子(JustinRochester 告诉我的),
那么笔者的双状态单栈操作的 PDA 在此时会出什么问题呢?显然,问题就出在不断重复提到的“单栈操作”上,如果是两个 PDA 同时运行,他们都需要用到栈。而如果是一个 PDA 一个 DFA,栈只被 PDA 独享,后者不需要用到栈。
后记 2
笔者还想到了一种废弃的判定 DFA 是否接受的办法,即在运行 DFA 前,压入一个特殊字符,在 DFA 接受后,弹出这个特殊字符,表示 DFA 接受。经过思考之后,好像并不适用于交问题,但是也许可以用在 RE 和 CFL 的连接语言上。 连接问题也没必要用,直接转 DFA 为 PDA 然后上一个机子的接受状态空转移到下一个机子的起始状态就行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
2021-04-24 Codeforces-Div.1及格计划