计算理论:下推自动机
Pushdown Automata
Definition
Informal: PDA is a
Formal: A PDA is a 7-tuple,
: a finite set of states : a finite set of input symbols : a finite stack alphabet : the transition function : the start state : the start symbol in stack : the set of accepting states
考虑 PDA 的迁移函数
是 中的状态 是 中的符号或是 是 中的符号
其输出为有序对
PDA 也可以像 FA 一样使用图表示,其中
- 节点代表 PDA 的 states
- 两个圈的节点表示接收状态
- 一条标号为
的从 到 的边表示
不同于 FA,描述状态机的运行的只有状态,PDA 的运行包括了状态与栈的内容,故定义 Instantaneous Description 为一个 3-tuple
是一个状态 是余下的输入 是栈的内容
PDA 的 ID 可以完全表示其运行时某一个时刻的格局。
为了描述 ID 随着 PDA 的运行而发生的转换,定义
显然,余下的输入和栈中剩余的部分不影响 ID 的转换
Basis.
Induction. If
对于 ID 的 transition,有
If
Proof.
对 ID 的转换步数归纳。由于 PDA 未读入的输入不会影响其行为,故在输入后添加后缀
Q.E.D.
同样的,有
If
then
需要注意的是未读入的输入不会对 PDA 产生影响,故可以将其共同的后缀去除,但是不能将栈共同的后缀去除。考虑转换前栈中为
添加或删除输入串的后缀不影响转换,但只能添加栈底内容而不能删除
The Language of a PDA
有两种方式可以让一个 PDA 接受输入
- acceptance by final state: 当输入结束时,PDA 状态停止在接收状态
- acceptance by empty stack: 当输入结束时,PDA 栈空
可以得出这两种方式是等价的,即给定一个语言
Acceptance by Final State: 设 PDA
即在输入结束后,PDA 到达接收状态,而此时栈中可以是任意内容
Acceptance by Empty Stack: 设 PDA
即输入结束后栈清空则视为接受,PDA 此时可以处于任意状态
事实上,
From Empty Stack to Final State
If
引入一个新的符号
同样需要引入一个新的开始符号
其中
,即开始时 将 压入栈中,同时转移到 的开始状态 - 对于所有
,有 ,即 模拟 的运行 - 对于所有
,有
只需证明
Proof.
(
而由于
根据
即
(
这样任意接受
且除去开始的一步和结尾的一步,中间的转换都是
即
Q.E.D.
From Final State to Empty State
If
基本思想同样是用
为了防止在
其中
,开始时 将 压入栈中,转到 的开始状态 - 对于所有
,有 ,即 模拟 的运行 - 对于所有
有 ,即当 接受输入时, 开始将自己的栈清空,不再消耗输入 - 对于所有的
有 ,即当进入状态 后, 将栈中所有的符号弹出直至栈为空,然后接受该输入
只需证明
Proof.
(
则根据
于是有
(
故任意接受
而所有
即
Q.E.D.
Equivalence of PDA and CFG
正如 CFG 一样,PDA 定义的语言正好是 CFL(无论是 acceptance by empty stack 还是 acceptance by final state),这说明 PDA 和 CFG 表达能力是等价的
From Grammars to PDA
基本思路为,给出一个 CFG,可以构造一个 PDA 模拟其最左推导过程。而最左推导的每一步是由最左句型来完全表示的。
任何非 terminal string 的最左句型都可以写为
使用 PDA 模拟最左推导的思路在于令最左句型
若最终成功模拟了最左推导,则所有的 variable 都被展开,所有的 terminal 都与输入中的 symbol 匹配,最终栈为空,接受该输入
令
其中
对于每个 variable
对于每个 terminal
按照上述方法构造出的 PDA
Proof.
(
则有
Basis. 当
Induction. 假设
当
(
证明将基于
Basis. 只有一步操作,则唯一的可能是
Induction. 考虑
则接下来的
由于这其中操作步数都不会超过
于是有推导
即
令
Q.E.D.
From PDA to Grammars
对任意 PDA
基本思想是文法中的 variable 代表了 PDA 运行中的一个 event,即 variable
- 净效应为从栈中弹出
,即弹出 的过程不涉及 以下的栈内容 - 当
从栈中被弹出的同时,状态也从开始的 转换到了
而这个 variable 产生的 string 即是在 event 中被消耗的输入
更为详细的构造为,令
其中
- 特殊的开始符号
- 其余符号都形如
对于
对所有状态
, 中有产生式 ,即 产生的 string 可以将 从栈中弹出,同时状态转移到 ,即 。即 将产生所有能让 PDA 清空其栈的 string 若
,其中 ,则对于任意状态 ,有产生式 即从栈中弹出
的方法可以是读入 后逐个弹出 ,而期间的状态转换可以是任意状态。若 ,则为
可以证明
Proof.
(
Basis. 行动一步,则
Induction. 考虑操作了
其中
故
其中
对任意
故有
(
Basis. 仅有一步推导,则一定有产生式
Induction. 考虑
其中
则可以将
由于可以在输入后和栈底添上任意符号串,即
即可得
由于
Q.E.D.
则根据上述结论
Deterministic Pushdown Automata
PDA 默认即是 Nondeterministic 的,而实际上 deterministic 的 PDA 也有重要的作用
一个 PDA
- 对于任何
, 只有一个元素 - 若对
有 非空,则 一定是空的
DPDA 接受的语言集合在正则语言和 CFL 之间,首先可以证明所有的正则语言都可以被 DPDA 接受
如果
Proof.
显然,只需要利用 DPDA 中 DFA 的部分即可
令 DFA
对于所有满足
显然
Q.E.D.
Prefix Property: 在一个 language 中,没有两个不同的字符串满足其中一个是另一个的前缀
则有定理:对某个 DPDA
故可以看出正则语言可以由 acceptance by final state 的 DPDA 描述,但不一定能由 acceptance by empty stack 的 DPDA 描述,即对于 DPDA 来说
故对于 DPDA 来说,
如果对 DPDA
如果对 DPDA
上述定理的证明可以见课本 P.255-256