期末复习¶
可判定性与图灵机¶
题目来自: COMP481 Review Problems - Luay K. Nakhleh
答案: COMP481 Review Problems (Solution) - Luay K. Nakhleh
判定工具¶
Rice's Theorem¶
总结¶
训练题¶
比较有意义的题
对以下给定的语言,判断它们: (I) 递归, (II) 递归可枚举且非递归, (III) 非递归可枚举. 根据 Few Shot 的学习方式,我展开了前几题的答案,可以摸索一下大致思路.
-
is a TM and there exists an input on which halts in less than stepsAnswer
是递归的,存在图灵机 判定 :- 给定输入
, 如果 不是合法图灵机编码,拒绝 (之后省略这步) - 计算
- 枚举
的所有长度不超过 的输入,模拟 的运行,如果在 步内停机,接受,否则拒绝
这个例子重点在于步数有限,同时这也意味着输入串长度有限 (枚举更长的输入串没有意义,因为走不到),图灵机可以一一枚举.
- 给定输入
-
is a TM andAnswer
是非递归可枚举的, 下面证明 , 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 擦掉输入串
- 将
拷贝到带上 - 模拟
在 上的运行,如果 在 上停机,接受,否则拒绝
规约的证明:
在 上不停机 不接受任何串 在 上停机 接受所有串
扩展: 如果将语言改为
is a TM and : 可以任选一个有 3 个串的集合 , 在 的第一步前添加如果 就接受, 这样一来 . - 擦掉输入串
-
is a TM andAnswer
是递归可枚举且非递归的.递归可枚举:
构造图灵机
, 对于输入 :- 枚举所有
可能的输入串 , 模拟 的运行 - 如果找到了至少 3 个停机的输入,就接受
上面的枚举需要是“对角线式”的,先枚举所有长度为 1 的串,单步模拟,再枚举长度为 2 的串,两步模拟,以此类推. (后面的题都如此, 就不再一一约定了)
非递归:
证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 擦掉输入串
- 将
拷贝到带上 - 模拟
在 上的运行,如果 在 上停机,接受,否则拒绝
规约的证明:
在 上停机 接受所有串 在 上不停机 不接受任何串
这一部分的构造和上一题很相似,只不过是从
换成了 , 这取决于条件中的不等号方向. - 枚举所有
-
is a TM that accepts all even numbersAnswer
是非递归可枚举的. 需证明 .对于
问题的输入 , 映射 , 对于输入 :- 计算
- 模拟
在 上运行 步 - 如果
步内停机,就拒绝,否则接受
规约的证明:
在 上不停机 接受所有串, 那自然也就接受了全部偶数 在 上 步内停机 拒绝所有 的串 拒绝无限多个偶数
注: 这里将是否接受与输入串
长度结合的技巧值得学习.扩展:
-
修改为
is a TM that does not accept all even numbers : 此时变成递归可枚举,可以用图灵机 枚举所有偶数输入给 , 如果 不接受某个偶数,就接受. 这样可以半判定 接受的是不是所有偶数. -
修改为
is a TM that rejects all even numbers : 此时变成 RE 非 R, 可以证明 . 这个改版和原版的关系,与 和 的关系相似.
- 计算
-
is a TM and is finiteAnswer
是非递归可枚举的,类似 的构造: 在 上不停机 不接受任何串 有限 在 上停机 接受所有串 并非有限,
-
is a TM and is infiniteAnswer
也是非递归可枚举的,是不是和想的不太一样?用
的构造可以证明 , 这只意味着 是非递归的: 在 上停机 接受所有串 无限 在 上不停机 不接受任何串 有限
但事实上也可以找到规约证明
, 而这和 类似:对于
问题的输入 , 映射 , 对于输入 :- 计算
- 模拟
在 上运行 步 - 如果
步内停机,就接受,否则拒绝
规约的证明:
在 上不停机 不接受任何串 有限 在 上 步内停机 接受所有 的串 无限
-
is a TM and is countableAnswer
是递归的: 这是全部图灵机编码的集合,注意: - 对于一个语言,其内容是可数无限多的,比如对于 可以按照字典序一一枚举串长为 的串,给它们编号,就建立了与 的一一映射. - 而语言的个数是不可数无穷多的, 是 . -
is a TM and is uncountableAnswer
是递归的: , 没有一个语言有不可数无穷多个元素. -
and are two TMs, andAnswer
是递归可枚举非递归的:递归可枚举:
构造图灵机
可以半判定, 对于输入 , 并行模拟 和 :- 模拟
输入为 - 模拟
输入为 - 两台机器有一个停机就停机
非递归:
证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 模拟
在 上的运行,如果停机就接受,否则拒绝
规约的证明:
在 上停机 和 接受所有的串 在 上不停机 和 拒绝所有输入
- 模拟
-
and are two TMs, andAnswer
是递归可枚举非递归的,与 类似,只不过证明递归可枚举改成两台都停机才停机. -
and are two TMs, andAnswer
是非递归可枚举的,条件等价于 $\varepsilon \in L(M_1) $ 且 , 证明 :对于
的输入 , 构造映射 , 对于输入 :- 模拟
在 上的运行- 如果
停机, 拒绝,而 接受 - 如果
不停机, 接受, 拒绝
- 如果
规约的证明:
在 上不停机 接受所有串, 拒绝所有串 在 上停机 拒绝所有串, 接受所有串
- 模拟
-
is a TM, is a TM that halts on all inputs, andAnswer
是递归可枚举非递归的.递归可枚举:
构造图灵机
半判定, 对于输入 :- 模拟
输入 的情况, 如果 停机就接受.
非递归:
使用 Rice's Theorem 可以证明.
- 模拟
-
is a TM, is a TM that halts on all inputs, andAnswer
是递归的. , 所以 是所有图灵机编码的集合. -
is a TM, is a string, and there exists a TM, , such thatAnswer
是递归的, 取 拒绝所有输入的图灵机,这样的话,所有 都属于 . -
is a TM, and there exists an input on which halts within 1000 stepsAnswer
是递归的,构造图灵机 枚举所有 , 模拟 的运行,如果在 步内停机,接受, 如果都不存在,就拒绝. -
is a TM, and there exists an input whose length is less than 100, on which haltsAnswer
是递归可枚举非递归的.递归可枚举:
构造图灵机
半判定, 枚举所有 , 模拟 的运行,如果存在一个 使其停机,就接受.非递归:
证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 模拟
在 上的运行,停机与否都与 一致
规约的证明:
在 上停机 对所有输入都停机 在 上停机 在 上不停机 对所有输入都不停机 在 上不停机
- 模拟
-
is a TM, and is the only TM that acceptsAnswer
是递归的, , 没有一个图灵机是唯一接受自己语言的, 因为可以对起做一点点改动,中间加一些无意义动作,最后还是可以接受相同的语言. -
is a natural number, is a string, is a TM for all , and at least TMs of halt onAnswer
是递归可枚举非递归的.递归可枚举:
构造图灵机
半判定, 对于输入 , 并行模拟每台图灵机对于输入 的运行情况,一旦有至少 台停机,就接受.非递归:
证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 模拟
在 上的运行,如果停机就接受,否则拒绝
规约的证明:
在 上停机 停机 在 上不停机 不停机
- 模拟
-
is a TM, andAnswer
是递归的,可以构造图灵机 按照字典序枚举所有合法的长度 的图灵机编码. -
Answer
是递归可枚举非递归的.递归可枚举:
构造图灵机
半判定, 对于输入 : 枚举所有符合条件的输入 , 如果找到一个 使得 且 , 就接受.非递归:
使用 Rice's Theorem 或者构造一个规约,证明
都可以, 构造的话可以参考 . -
is a TM, and halts on all palindromesAnswer
是非递归可枚举的, 这道题很像 :可以证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 计算
- 模拟
在 上的运行 步 - 如果
步内停机,就拒绝,否则接受
规约的证明:
在 上不停机 接受所有串 在所有回文串上停机 在 上停机 拒绝所有 的串 回文串 被 拒绝
- 计算
-
is a TM, and is emptyAnswer
是非递归可枚举的, 构造类似 , 让 分别是 和 分类讨论. -
is a TM, andAnswer
是递归可枚举非递归的.递归可枚举: 按照长度枚举所有
, 模拟 看其是否接受, 统计 中的符合条件的串数目,如果大于等于 就接受.非递归: 构造类似
. -
is a TM that halts on all inputs and for some undecidable languageAnswer
是递归的,既然 对所有的输入都停机,那么 是可判定的,因此 . -
is a TM, and accepts (at least) two strings of different lengthsAnswer
是递归可枚举非递归的.递归可枚举: 构造图灵机
半判定, 对于输入 :按照长度枚举串,并记住某个长度是否存在一个串被 接受,如果有两个不同长度的串被接受,就接受.非递归: 构造类似
, 也可用 Rice's Theorem. -
is a TM such that both and are infiniteAnswer
是非递归可枚举的证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 计算
- 如果
是奇数,就接受 - 否则,模拟
在 上运行,如果停机就接受,否则拒绝
规约的证明:
在 上不停机 接受所有奇数长度的串 和 都是无限的 在 上停机 接受所有串 有限
- 计算
-
is a TM, and does not halt on within stepsAnswer
是递归的,构造图灵机 模拟 在 上的运行,如果在 步内停机,就拒绝,否则接受. -
is a TM, and is primeAnswer
是非递归可枚举的,证明类似 的扩展 的情况.如果想在
有限的情况下来证明,可以有下面的构造:对于
问题的输入 , 映射 , 对于输入 :- 如果
是 字典序前 个串, 接受 - 如果
是第 个串,模拟 在 上的运行,如果停机就接受,否则拒绝 - 其他情况直接拒绝
规约的证明:
-
在 上不停机 接受前 个串 是素数 -
在 上停机 接受第 个串 不是素数
- 如果
-
there exists such that for everyAnswer
是非递归可枚举的. -
there exist such that either orAnswer
是递归的, 是全部图灵机编码的集合. 取 , 好话坏话全让它说了.扩展:
修改为
is a TM, and there exist such that and .此时变为非递归可枚举的, 证明
.对于
问题的输入 , 映射 , 对于输入 :- 如果
, 接受 - 否则,模拟
在 上的运行,如果停机就拒绝,否则接受
规约的证明:
在 上不停机 只接受 and 在 上停机 接受所有串 ,
- 如果
-
there exists a TM such that andAnswer
是递归的, . -
-
does not accept any string such that 001 is a prefix ofAnswer
是非递归可枚举的. 规约类似 . -
does not accept any string such that is a prefix ofAnswer
是非递归可枚举的. 同样地, 规约类似 . -
is a prefix ofAnswer
是递归的,构造图灵机 直接判断 是否为 前缀即可. -
Answer
是非递归可枚举的.证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 模拟
在 上的运行,如果停机就接受,否则拒绝
和 拒绝所有串.规约的证明:
-
在 上不停机 拒绝任何输入 -
在 上停机 接受所有串
- 模拟
-
Answer
是非递归可枚举的. 类似 的证明, 如果非要真子集的话,就改一下 让它接受一个串就行:证明
, 即 可以归约到 .对于
问题的输入 , 映射 , 对于输入 :- 模拟
在 上的运行,如果停机就接受,否则拒绝
只接受 的第一个串, 拒绝所有串.规约的证明:
在 上不停机 拒绝任何输入 在 上停机 接受所有串
- 模拟
-
there exist two TMs and such thatAnswer
是递归的, 是全部图灵机编码的集合. 取 和 接受所有的串. -
is a TM that accepts using at most squares of its tapeAnswer
是递归的我们的思路是,我们一定能够在有限步内判断出
是否最多使用 个方格就能接受 .记
的状态数为 , 字母表大小为 , 记 . 如果 用了至多 个方格,那么 至多有 种格局 (枚举状态,带子内容,带头位置).如果
在 上运行了超过 步,而且它没有使用超过 个方格,那么根据鸽巢原理,它的格局一定与之前的某个格局相同,也就是陷入了死循环.因此,我们只需要构造图灵机
, 模拟 在 上 步,如果 在 步内接受,那么 接受, 如果拒绝, 拒绝. 如果 使用了超过 个方格,或者到 步还没有停机,也拒绝.这样,我们就使用
判定了 .