Skip to content

Lecture 7. Reducibility 可归约性 ​

简单地说,归约(reduction)就是把一个问题转化成另一个问题,且可以用第二个问题的解来解第一个问题。

如果有 A 和 B 两个语言(或问题),如果可以用 B 来解决 A,就说 A 可归约到 B。

  • 如果 B 容易解决,那么 A 也会容易解决。因为 A 可以转化到 B 去。
  • 但如果 A 比较难,B 也会难。 因为如果 B 不难,A 也不会难的。我们着重应用第二条。

例如:

  • 求矩形的面积,可以归约到求长宽
  • 可归约到
  • 可归约到

当然,有可能会存在 A 和 B,使 A 能归约到 B,同时 B 也能归约到 A,即 AB 等价。

语言理论中的不可判定问题 ​

比如,对于语言 是否可判定,可以归约到另一个语言 是否可判定。这是停机问题(halting problem)。

定理: 不可判定。证明思路是采用反证法(事实上,大部分的不可判定,都可以用归约到 的方法证明)。

假设 可判定,就能证明 可判定(设 是 的判定器,构造图灵机 判定 ):

“在输入 上,

  1. 先跑一遍判定器 看看 是否对于输入 停机。如果不能停机,直接拒绝。
  2. 由于现在确保 可以停机,于是就直接模拟运行 ,直到停机为止。若 接受则 接受, 拒绝则 拒绝”

但是这与事实不符,因为 明明是不可判定的,这里证明出它可判定,产生了矛盾,所以最初的假设不成立。于是 不可判定。


定理: 不可判定。 像刚才一样,用反证法(归约)。

先假设 可判定,就能证明 可判定(设 是 的判定器,构造图灵机 判定 )。

“在输入 上

  1. 第一步,把图灵机 转化成一个新的图灵机 ,其中 ‘在输入 上:
  2. 如果 则直接拒绝,否则在 上面运行 。
  3. 若 接受, 接受,否则拒绝。’
  4. 可以看到, 和 非常像,唯一的差别就是提前检查了一下是否 。所以,。
  5. 第二步,用 检查 是否是空的,即是否满足 ,也就是在输入 上运行 看是否接受。如果是,意味着 拒绝 ,则拒绝。否则意味着 接受 ,则接受。”

但是这与事实不符,因为 明明是不可判定的,所以 不可能知道 能否接受 。这里证明出它可判定,产生了矛盾,所以最初的假设不成立。于是 不可判定。

映射可归约性 Mapping Reducibility ​

也有的教材,写作 多一可归约性(many-one reducibility)。

图灵机计算函数的方法是,把函数的输入放在纸带上,开始运行,最终停机,把停机后纸带上的内容作为函数的输出。

定义:如果有一个图灵机 ,使得在在每个输入 上都停机,且此时只有 出现在纸带上,则称函数 是一个 可计算函数(computable function)。

定义:如果存在一个可计算函数 使得对于每个 ,,记作 ,则称函数 是 到 的 归约,语言 是 映射可归约(mapping reducible) 到语言 的。注意,定义当中的符号 的含义是 当且仅当。也就是,如果有 ,则也必须满足 。

也就是说,如果要证明映射可归约性,只需要把这个可计算的归约函数 写出来就好了。 的定义域永远是 ,到达域永远是 。注意要满足当且仅当的特性才能是可计算函数。

下图可以形象化的表达可计算函数的定义:

image-20221105022557676

举一个映射规约的例子:,对应的可计算的规约函数 是:。因为 ,即: 接受 当且仅当 。课件上写成了 ,应该是课件错了吧,反正书上是没有那左右 angle 符号的。

根据定义,如果 ,那么 同时成立。 不过, 不一定成立,要不然干嘛要用小于号而不是等于号来表示映射可归约呢?

不仅如此, 是一个可传递的二元关系。也就是说,如果 且 同时成立,就能够得到 .

关于可判定性 ​

定理:若 且 是可判定的,则 也是可判定的。证明:设图灵机 判定 ,构造 的判定器 :“在输入 上,首先计算 ,然后用 的值作为 的输入,检查是否满足 ,最终 接受就接受,否则拒绝。”

推论:若 且 是不可判定的,则 也是不可判定的。

定理:若 且 是图灵可识别的,则 也是图灵可识别的。证明方法与刚才类似。

推论:若 且 不是图灵可识别的,则 也不是图灵可识别的。这一条推论对于证明图灵不可识别尤其重要。

注意:上述关于图灵可识别性的定理和推论,只适用于映射归约,而对于普通的归约,是不满足的。举个例子: 可归约到它的补 。后者是图灵可识别的,但是前者不是。

映射可归约性和普通可归约性对比 ​

  • 映射可归约性:把 A 问题转化成 B 问题。是一种特殊的可归约性问题,对于证明图灵不可识别非常好用。
  • 普通可归约性:用 B 问题来解决 A 问题。在概念上更加简单,对于证明不可判定非常好用。

注意:

  • 可归约到
  • 但是 可能并不能映射归约到 ,比如 (图灵可识别语言在补运算下不封闭)

证明不可判定、图灵不可识别的技巧 ​

如果要证明 不可判定,一般做法是找到一个已知的可归约到 的不可判定语言 (通常选择 ),然后假设 可判定,令 是 的判定器,然后构造出一个图灵机 判定 。然而 是不可判定的,产生矛盾,假设不成立,于是 不可判定。

如果要证明 图灵不可识别,一般做法是,找到一个已知的映射可归约到 的图灵不可识别的语言 (通常选择 ),然后写出规约函数 。(上面第二条推论)

例:证明 不可判定 ​

廖智炫教我的。核心思路是:

假设 是 的判定器。用 构造一个图灵机 。

先搞一个 出来, 接受 的时候, 接受正则语言 ; 拒绝 的时候 只接受一个非正则语言 。换句话说, 接受所有具有 形式的串串,且在 接受 的时候接受任意串()。

然后 把 作为输入调用 。如果 接受 就接受, 拒绝 就拒绝。

于是这个 具有了判定 的作用。

例:证明 是图灵不可识别的 ​

上面已经指出过:。所以把不等号两边分别取反,仍然成立:。对应的规约函数仍然是:。因为 ,即: 拒绝 当且仅当 。

于是, 既不可判定(之前证明过),也不可识别(现在刚证明)。

例:证明 既不是图灵可识别的,也不是补图灵可识别的 ​

即: 和 都不是图灵可识别的。

要证明这个论题,只需分别证明:

  • ,即证明不是图灵可识别的
  • ,即证明不是补图灵可识别的

最后再应用上面第二条推论:若 且 不是图灵可识别的,则 也不是图灵可识别的。就能证明完了。

回忆一下: 及其补的格式是 , 及其补的格式是 。

证明方法是,对于任意的字符串 ,都构建对应的图灵机 ,

“对于输入 ,

  1. 忽略
  2. 在 上面执行 ”

也就是说,不管 遇到什么样的输入,都不管他,直接用 执行 。

另外,再构建一个图灵机 ,不管遇到啥输入都是直接拒绝。还有一个 ,不管遇到啥输入都直接接受。

那么:

  • 对于前者 ,可以构建出归约函数 ,因为 不接受 (形式化表述为 ),当且仅当 总是拒绝 (形式化表述为 ,即 )。
  • 对于后者 ,可以构建出归约函数 ,因为 不接受 (形式化表述为 ),当且仅当 总是不接受 (形式化表述为 ,即 )。虽然很是拗口,但要努力理解一下

两个归约函数都写出来了,于是这个论题也证明完了。

计算历史方法 Computation History Method ​

希尔伯特第十题 ​

语言 。该语言不可判定。

证明思路 1:证明 可归约到 。由于 不可判定,所以 也不可判定。

但是很难证明这个可归约性。这里需要使用 计算历史方法(computation history method)。

波斯特对应问题 Post Correspondence Problem ​

以骨牌簇的形式给出若干对字符串:。

定义 匹配 是指一个有限的序列(可重复),使得 。

如:,于是可重复排列 就是 的一个匹配(使 )。通俗的说,就是把骨牌簇可重复地重新排列,如果上半部分和下半部分相等,这个排列就称之为匹配。

波斯特对应问题,指的就是:给定骨牌簇 ,问 是否拥有匹配?

令语言 。该语言是不可判定的。要证明这个东西,也需要 计算历史方法。

回顾:图灵机的格局 ​

图灵机的格局是一个三元组 , 表示状态, 表示读写头的位置, 表示纸带的内容。

一个格局可以被编码用字符串表示为 ,其中 ,且读写头的位置在 的第一个符号上。如:格局 可以编码为 。

格局可以代表图灵机在一个时刻的快照,就像电子游戏里面的存档一样。

计算历史 ​

定义:图灵机 在输入 上的一个 接受计算历史(accepting computation history) 是指一个格局序列 ,其中 是起始格局。类似地,可以定义 拒绝计算历史(rejecting computation history)。注意,计算历史是一段格局的 序列,而不是一个单独的格局。

计算历史可以被编码为 的形式(当然,每一个 也被编码了)。比如下面这一坨就是一个接受计算历史。

线性界限自动机 Linearly Bounded Automata ​

是一种特殊的受到限制的图灵机,读写头不能移动到输入串以外的区域,也就是纸带的长度等于输入串的长度。

定义语言 。虽然 LBA 也是一种图灵机,但是 其实 是可判定的!因为,假如输入串的长度是 ,那么 LBA 的格局数最多就是 。因此,如果一台 LBA 运行足够久还不停机,仅有一种可能,就是进入了一个曾经经历过的格局。那么就可以构造出 的判定器了。 “在输入 上,在 LBA 上运行 步,如果接受了就接受,如果拒绝了或者没停机,就拒绝。”

然而, 是不可判定的。证明思路是证明 可归约到 。

跟之前的思路一样,假设判定器 判定 ,那么就可以构造出一个判定器 判定 。

“在输入 上,

  1. 构造一个 LBA ,这个 LBA 的输入是 ,它判断 是否是 在 上的一个接受计算历史。也就是说,只有输入的 是 在 上的一个接受计算历史,才接受。所以, 包含了 在 上的所有的接受计算历史。
  2. 然后,用 来判断 是否是 。如果不是空集,意味着存在接受计算历史,也就意味着图灵机 最终接受 ,所以 ,那么 的判定器 就接受,否则 拒绝。”

接下来考虑 LBA 怎么构造。

“在输入 上(注意 的形式是一个计算历史的编码),

  1. 检查 是否是 开头的( 是 在 上的起始格局)
  2. 再检查是否每一个 都能合法的从 转移过来
  3. 然后再检查最后一个格局是否是接受格局。
  4. 如果三项检查都通过了,意味着输入的 是一个接受计算历史,那么 就接受。如果任意一项检查没有通过,就拒绝。”

波斯特对应问题 Post Correspondence Problem ​

令语言 。接下来证明 语言 是不可判定的。

证明 可归约到 。利用计算历史方法(很像是归约法)。

先考虑简单情况,即匹配必须以 开头。

假设图灵机 判定 ,那么就能够用 造出一个图灵机 判定 。

“在输入 上,

  1. 构造一个 PCP 的实例 使得匹配都是 在 上的接受计算历史(稍后说明如何构造 )。
  2. 然后用 来判定 是否拥有匹配。如果有匹配,说明 在 上有接受计算历史,意味着 最终会接受 。若 接受, 就接受,否则 就拒绝。”

于是, 就可以判定 ,但这不可能,假设不成立,故 不可判定。

接下来描述如何构造出 。考虑起始骨牌 ,

关于如何构造 一直都还没学明白。。。

虽然说 不可判定,但是 图灵可识别。因为可以不停的尝试各种的可能的匹配(可能会耗时无限久)。于是可以根据「一个语言可判定,当且仅当既是图灵可识别又是补图灵可识别的」得到一个没啥用的推论: 不是补图灵可识别的。

不可判定 ​

张老师说其实跟证明 PCP 的不可判定性一模一样的。待补充。

语言问题可判定性总结 ​

DFACFGLBATM
接受性 A
空性 E
等价性 EQ
满性 ALL
停机性 HALT
正则性 REGULAR

常见形式语言分类 ​

(都不属于更低一层)

语言类语言示例
非图灵可识别,,,
图灵可识别,,,
可判定,,
上下文有关,,接受计算历史
上下文无关,,非 ,非 ,非接受计算历史
正则

语言类封闭性总结 ​

补交并连接星号
图灵可识别(TM)
可判定(TM)
上下文有关(LBA)
上下文无关(PDA)
正则(DFA)