“$\Pi^0 1$ 集恰是余可识别集合:其非成员有一个可搜索的有限反例。$n 1$ 时,$\Pi^0 n$ 不再等于普通余可识别;更准确地,它们的补集相对于 $0^{(n 1)}$ 可枚举。…”
形式陈述
把有限证据放在“否”的一边
有些问题的“是”可以通过找到一个有限证据确认,“否”却可能意味着某个搜索永远没有结果。可识别语言描述前一种单边保证;余可识别语言则把保证放到另一边:当输入不属于语言时,存在一个过程能够最终确认这一点。
“余”指的是补集。固定字母表
可识别。换句话说,存在一台机器
| 机器识别什么 | 必须最终接受的输入 | 另一侧允许的行为 |
|---|---|---|
| 拒绝或不停机 | ||
| 拒绝或不停机 |
表中的“允许”不是强制发散。一个识别器当然可以在部分非成员上直接拒绝;只要没有一条对所有输入都停机的保证,它就未必是判定器。
直觉
两边都有识别器,为什么就能判定
一个语言满足
从左到右很直接:判定器总会停机,交换它的接受与拒绝即可判定补语言。
反向则不能先把识别
每个输入恰好属于
例子与边界
停机与不停机:最典型的不对称
令
它可识别:直接模拟
停机问题不可判定性说明
于是
这里的逻辑方向容易弄反:不停机语言之所以余可识别,是因为它的补集“会停机”可识别,而不是因为我们能通过模拟最终看见“永远不停机”。
对某个具体程序,循环不变式或其他证明可能足以确认不停机;结论排除的是一个对所有不停机实例都最终给出确认的通用识别器,并不是说任何具体不停机事实都无法证明。
为什么交换两个状态不够
对判定器交换接受与拒绝,可以得到补语言判定器;对一般识别器这样做则不成立。原机器在某个非成员上若永远运行,交换两个终止状态并不会让这条无限运行突然停机。
“已经跑了一百万步仍没接受”也只是有限观察,不能证明以后不会接受。无限枚举同样如此:一个元素迟迟没有出现,不代表它不会在更晚出现。等待的时间再长,只要没有额外的可计算界,就不会自动转化为负面证据。
因此可识别与余可识别是两种算法能力,不能由“把输出取反”这种表面操作互相转换;只有原过程总会结束时,取反才充分。
推论与应用
与全称条件、闭包和归约的联系
把时间编码为自然数,可以把余可识别性写成
其中
有限并与有限交也保留余可识别性:取补后分别变为可识别语言的有限交与有限并,再用交错模拟构造识别器即可。若
文法歧义提供另一个具体例子:歧义可以由两棵有限语法树见证,无歧义 CFG 的集合因而余可识别。要证明它是否还能可识别,只需结合相应的不可判定性与“两边识别等于判定”的定理,而不必重新设计另一套机器。
与可识别语言比较,余可识别性为非成员提供最终接受的保证。停机集及其补集证明两类互不包含;两类的交恰是可判定语言。因此这里比较的是半判定证据朝向,既不是互斥分类,也不是同一个单边算法的两种名称。
参考资料
[1] Michael Sipser,MIT 18.404J,Lecture 8: Undecidability,余可识别性、交错模拟与停机问题;另见 Introduction to the Theory of Computation,第 3 版,第 4 章。
[2] Hartley Rogers, Jr.,Theory of Recursive Functions and Effective Computability,1967,可枚举集合及算术层级。