正则语言的可判定问题
DFA 接受性问题 - 可判定
- 检查输入是否是 DFA 和串
- 直接模拟 DFA,其一定可以停机
NFA 接受性问题 - 可判定
- 检查输入
- 选择一种方法
- 将 NFA 转为 DFA (多项式时间)
- 使用 NTM 模拟 NFA
正则表达式的派生问题 - 可判定
- 检查输入
- 将正则表达式转为 DFA 使用前面的机器判定
DFA 的空性问题 - 可判定
标记算法,DFA 有有限个状态。首先标记初始状态,每个状态如果前面的状态被标记则也标记该状态,直到没有新的状态被标记,如果接受状态标记则拒绝。
DFA 的等价问题
对于两个语言A、B计算其对称差(封闭操作)得到 DFA C,根据 C 是否为空接受或拒绝 A、B 等价。
上下文无关语言的可判定问题
, , 每个 CFL 是可判定的
CFG 的接受性问题 - 可判定
采用 CNF,派生长度为 n 的串需要 步,检查所有长度为 的派生。如果有一个产生 w 接受否则拒绝。
CFG 的空性问题 - 可判定
标记算法。从终结符开始标记,对于存在的规则 如果右侧都已经标记则对变元 进行标记。如果起始变元没有被标记则接受,否则拒绝。
CFG 的满性问题 - 不可判定
思路:从 出发的计算历史的规约。设计文法 G 产生所有不是 M 在 w 上接受历史的串,这样,当 M 接受 w 时,L(G) 就不满 ( 因为存在 M 在 w 上的接受历史 ),此时 就会拒绝,反之如果 M 不接受 w,则没有 M 在 w 上的接受历史,此时 L(G) 为满, 就会接受,依次判定
证明:按照思路构建判定 的 F,和一个根据 M 和 w 构建的机器 T,T 接受所有不是 M 在 w 上接受历史的串。将 输入 F,如果 F 接受,说明 L(T) 为满,说明没有 M 在 w 上的接受历史,所以拒绝,反之接受。
CFG 的等价性问题 - 不可判定
将 CFG 满性问题规约到 CFG 等价性问题,构造识别所有串的文法 FU,对于输入的文法 G,将 输入 ,如果接受则接受,如果拒绝则拒绝。
每个 CFL 是可判定的 - 可判定的
对于 CFL A,得到 CFG G 是它的文法,对于输入串 w 在 运行 ,如果接受则接受,否则拒绝。
不可计算问题
推论5.15:存在非图灵可识别语言
证明:全体图灵可识别语言构成可数集,前提语言是非可数集
定理5.9: 是不可判定的
思路:,使用对角线方法证明 不可判定。 对角化方法。
证明:假设存在 H 判定 。
构造 D 输入 ,如果 H 接受 则 D 拒绝,否则接受,总的来说D 输出和 H 相反的结果。
现将 输入 D 中,如果 D 接受 ,则 H 拒绝 ,即 D 不接受 ,矛盾。
关键在于 D 本身是图灵机,他将出现在 H 的结果列表中,但 H 对角线的结果和 D 得到的结果是互补的于是得到矛盾。
定理5.16: 可判定 和 都是可识别的。
思路:
- - 如果 可判定,则 也可判定 (布尔运算封闭),所以 可识别
- - 如果 和 都可识别,则根据当 接受时接受, 接受时拒绝(此时说明 不接受)。
推论5.17: 是图灵不可识别的
图灵机的不可计算问题
定理6.1: 是不可判定的
思路:假设这个问题可判定,证明 可判定,矛盾。
证明:对于输入 ,使用 判定是否不停机,如果不停机就拒绝,否则模拟 M 输入 w,如果接受就接受,如果拒绝就拒绝。
定理: 是不可判定的
思路:使用该语言使 可判定,矛盾。
证明:构造 =“
- 如果 ,则拒绝
- 如果 ,则在 x 上运行 M,当M接受时就接受”
对于输入 ,首先构造 ,如果 E 拒绝 ,说明其不为空,即 M 接受 w,反之,如果 E 接受 则 其为空,说明 M 不接受 w, 只在 M 接受 w 时有值,否则为空。
定理6.3:是不可判定的
思路:使用该语言使 可判定,矛盾。
证明:构造 =“
- 如果x具有 形式,接受
- 如果不是这种形式,就用 w 在 M 上运行,如果 M 接受 w,则接受”
对于输入 ,首先构造 ,用 R 接受输入 ,如果 R 接受,则说明 的语言是正则的,即 M 接受 w,此时其代表的语言是 ,反之,其只接受 该语言是非正则的,所以 M 没有接受 w,据此进行接受或拒绝。
定理6.4: 是不可判定的
思路:使用该语言使 可判定,矛盾。
证明:将一个空图灵机作为 EQ 的一个输入,即可判断图灵空性问题。
可判定性总结
DFA | CFG | TM | |
---|---|---|---|
接受性 | √ | √ | × |
空性 | √ | √ | × |
等价性 | √ | × | × |
基于计算历史的规约
接受计算历史:格局序列 ,其中 是初始格局,每个 都是合法转移, 是接受格局。计算历史都是有穷序列。
线性界限自动机 (LBA)
带头不能移出输入区常数倍的图灵机。识别上下文有关语言。
定理6.8: 是可判定的
思路:对于有 q 个状态和 g 个带符号的 LBA,对于长度为 n 的带子,M 恰有 个格局。由于格局数有限,所以当格局数超过这个值时拒绝 ( 解决停机问题 )。非确定 LBA 格局数为
定理6.9: 是不可判定的
思路:使用从 出发的规约。使用 M,w,构造 LBA B,使得 M 接受 w 时 L(B) 非空,这时候可以使 L(B) 为接受计算历史,这样,当 M 接受 w 时,说明 L(B) 不为空,此时使用 判定 B 即可知道 M 是否接受 w。
证明:构造识别计算历史的 TM B。基于思路设计图灵机。
规约的定义、性质
可计算函数:对于某个函数 f,如果存在图灵机 M,使得在每个输入上停机且 f(w) 出现在带上,则 f 是可计算函数。
m规约:存在 f 使得对于 x:
即 A 可 m 规约到 B,记作
称函数 f 为从 A 到 B 的规约,记作
定理6.16:若 ,且 B 可判定,则 A 可判定。
思路:使用规约 f 将 A 转为 B,并根据 B 的输出输出。
定理6.1:
思路:将判断 M 接受还是拒绝 w 的问题变为机器接受 w 后能不能停机问题。
证明:构造 F 计算 f = “
- 构造下面机器 T=“
- 在 x 上运行 M
- 若 M 接受,则接受
- 若 M 拒绝,则进入死循环
”
- 输出”
RICE 定理
若 S 是非平凡指标集,则 S 不可判定。
S 非平凡指
S 是指标集指 S 是 TM 编码的集合,且