Skip to content

Lecture 6. Undecidability 不可判定性 ​

函数知识回顾(CS172 笔记摘录) ​

函数的定义域,值域,像,到达域(domain,range,image,codomain) ​

  • 定义域:略
  • 值域:略
  • 像:是值域的一个子集,这个子集包含由函数 映射来的一些元素。注意像并不是函数的值。函数的值是值域当中的某个元素,而函数的像是至于当中的某个子集。
  • 到达域,又称对应域,与值域不同。值域是到达域的一个子集。满射函数的值域与到达域是相等的。

函数的单射,满射,双射(injective,surjective,bijective) ​

  • 单射,是指,像中的每一个元素,都是由定义域中唯一的一个元素映射来的:
  • 满射,是指,像中的每一个元素,都能被定义域中的元素映射得到:
  • 双射,是指,既是单射,又是满射。即双射的两个集合,元素个数一定相等。
  • 在 CS355FZ 当中,有时候说 单射是 one to one,满射是 onto,双射 correspondence。

偏函数(partial function) ​

大概就是,定义域当中有的元素没有映射出去。

如果进一步限制约束偏函数的定义域,那么就会变成 total function(翻译过来可能是全函数)

比如,阶乘函数 的定义域如果是整数集,那么它就是一个偏函数,因为 不知道。

无限集的大小 ​

定义:当集合 和集合 之间存在一个双射关系 ,则称集合 和集合 具有相同规模(same size)。非形式化的讲,就是可以将两个集合当中的元素两两配对。

自然数集 ,整数集 。这两个集合之间存在双射,因为存在函数:

定义:与自然数集 之间存在双射关系的函数,以及所有的有限集,称为可数集。所以整数集 是 可数(countable) 的。

更大的无限集?(摘自 CS172 笔记) ​

注意 CS172 当中的集合 是包含 的,不过影响不大。

考虑集合 。

这个集合,铺成正方形,每一行每一列都是无限个…但是如果从左上角开始,斜着计数,就可以列出这种形式:…看起来依然是可以数出来的吼

那么如何计算这个集合 的势?

不妨定义函数 。由于 和 都是质数,由唯一分解定理得知, 是双射的,即每个 都能通过 映射到某个整数,而那个整数也只能分解成 的形式。于是, 就与 的一个无限子集建立了双射关系。而 的无限子集的势也是 。故, 的势还是 ,这个集合是可数集。

扩展一步,如果是 ,甚至是更多维数,依然是可数的。二维的,用前两个质数,三维的就用前三个, 维的就用前 个质数,就好了。比如, 就可以映射到 。

再拓展一下,对于有理数集 以及正有理数集 ,也都是可数集。因为有理数 可以与 双射,这就回到了刚才的二维问题。

对角化方法 ​

CS355 的课本当中,给出了另一种证明集合 可数的方法:从左上角开始,画一条斜着的线,不断地把这条线往右下方移动。每次碰到线的数字,都加入集合当中(忽略约分后已存在的数字)。这样,每划到一个有理数,就增加一个计数器,而计数器的值是整数,所以正有理数集也是可数的。

注意英文单词对角线:diagonal。如果考试考了,要记得拼写。

事实上可以把这种对角化方法想象成二维坐标系。分子分母分别是横纵坐标。

image-20221028145921647

然而,实数集 不是可数集。

用对角化方法证明: 不可数 ​

首先假设 可数,那么就一定存在一个 的双射关系。

假设 的前几项如下表:

只要我能够找到一个实数 一定不在这个 的表格里面,就能够证明 不可数了。这个 很好找。

  • 对于 ,小数点后第 位数字是 ,那我就令 的小数点后第 位数字不是
  • 对于 ,小数点后第 位数字是 ,那我就令 的小数点后第 位数字不是
  • 对于 ,小数点后第 位数字是 ,那我就令 的小数点后第 位数字不是
  • …
  • 那么,对于 ,不管 取值是多少,我都让 的第 位与 不同,那么这个 就一定不会在这个表格里面。所以,这个 无法与 的某个元素双射。于是, 不可数。

推论 ​

  • 令 表示所有的语言,那么 不可数。因为 与 等势。回顾:语言是 当中的一个元素,即 的每一个子集都是一个语言。用一个无限长的二进制串表示 当中的第 个元素是否包含在这个语言(子集)当中。那么这些二进制串就与语言形成双射。像之前证明 不可数一样(小数点后有无限个数字),同理可以证明 。不过, 是可数的。因为 ,所以 。
  • 令 表示所有的图灵机,那么 是可数的。因为 。而 是可数的,所以它的子集也是可数的。至于说为什么 可数,是因为 ,能一个一个的列出来,所以是可数集。
  • 存在不可判定的语言。因为语言比图灵机多(因为 )。

用对角化方法证明:语言 不可判定 ​

用反证法。先假设 是可判定的,也就是存在一台判定器 判定它:$$H(\langle M, w\rangle)= \begin{cases}\text {接受} & \text { 若 } M \text { 接受 } w \ \text {拒绝} & \text { 若 } M \text { 拒绝 } w \end{cases}$$。

然后再构造一个新的图灵机 ,$$D(\langle M\rangle)= \begin{cases}\text {接受} & \text { 若 } M \text { 拒绝 }\langle M\rangle \ \text {拒绝} & \text { 若 } M \text { 接受 }\langle M\rangle\end{cases}$$。

然而由于 是随便的一个图灵机,所以 可以替换成 作为 的输入:$$D(\langle D\rangle)= \begin{cases}\text {接受} & \text { 若 } D \text { 拒绝 }\langle D\rangle \ \text {拒绝} & \text { 若 } D \text { 接受 }\langle D \rangle\end{cases}$$。

观察这个式子: 拒绝 的条件下,反而要让 接受输入 ,这是一个矛盾。因此,图灵机 是不存在的。所以不存在能够判定语言 的图灵机。所以语言 是不可判定的。

为什么说这种证明是使用了对角化方法?因为可以用这张图来描述证明过程。

image-20221110233024903

当 在这里面,对角线上的 的就会产生矛盾,因为这个位置的值要与这一列上下划线标注的值相反,于是他就要跟自己相反~这…听起来就是个怪怪的矛盾。

由于队列自动机可以模拟图灵机,所以还可以推出:语言 也是不可判定的。

图灵不可识别语言 ​

定义一个语言如果是图灵可识别的语言的补集,那么这个语言是 补图灵可识别的(co-T-recognizable)。

定理:语言 是可判定的,当且仅当 与 都是图灵可识别的,即 既是图灵可识别的,也是补图灵可识别的。 正方向比较简单,下面考虑反方向的证明思路:构建图灵机 分别识别 ,再构建一个图灵机 判定 。 对于输入 ,并行的在 上运行 ,直到其中一个进入接受状态。如果 进入了接受状态就接受,如果 进入了接受状态就拒绝。因为对于任意一个串,要么在 里面,要么就在 里面,所以 和 当中一定会有一个接受,于是 就会停机。意味着 不会永远运行下去,是一个判定器。所以 是可判定的。

推论: 是图灵不可识别语言。因为 可识别但不可判定。

image-20221030184209850

封闭性 ​

推论:图灵可识别语言,在补运算下不封闭。 事实上,图灵可识别语言,除了补运算,全都封闭(并、连接、星号、交)。

  • 交:构建一个图灵机,含有两个子图灵机,当两个子图灵机都接受,才接受
  • 并:构建一个图灵机,含有两个子图灵机,当两个子图灵机有一个接受,就接受
  • 连接:非确定性的枚举所有的位置( 个分割点),把串分成前后两部分,如果有一种枚举方案,两部分都接受了,就接受
  • 星号:类似连接运算,只是连接的方案更多罢

特殊的,对于可判定语言,在并交补连星五种运算下,全都是封闭的。

详细证明可以参考这份 公开幻灯片。