《计算模型导引》(2019)课后习题答案(五):Turing机

个人答案,仅供参考。

查看全部

页面含有超多数学公式,打开后需要等待很长时间才能彻底完成渲染和排版,尤其是移动设备。

5.1 构造机器计算函数

解:

0 1 注释
1 0R2 0R1 抹去
2 0R3 1R2 跳过
3 0L4 0R3 抹去
4 0L4 1L5 回到尾部
5 0R6 1L5 回到头部,停机

5.2 构造机器使

解:显然需要使用循环,关键点在于实现对循环,状态的记录,可以采用如下实现。

  • 先把当前的位置变成0作为标记,右移:
  • 然后向右跳过全部1、一个0、再全部1:
  • 在此位置设置一个1,左移:
  • 接着向左跳过全部1、一个0、再全部1:
  • 将最初设置的0恢复为1并右移一格:

可以看到,循环体最后回复到了初始的情形,唯一的区别是指针右移了一格并且在复制区域末尾新增了一个1,对重复便完成了上述复制操作

0 1 注释
1 0R6 0R2 置一个0,或者停机
2 0R3 1R2 右移跳过(旧)1,再跳过一个0
3 1L4 1R3 右移跳过(新)1,再设置一个1并左移
4 0L5 1L4 左移跳过(新)1,再跳过一个0
5 1R1 1L5 左移跳过全部(旧)1,将0恢复为1并回到循环开始

5.3 构造机器计算函数

解:很自然地想到,乘法应该通过循环加法实现。这里可以将作为循环计数量,每次累加一个实现乘法。

  • 构造机器用于初始化,即在最右侧添加一个0,即,可采用如下形式

    注:原始定义中的是用来在输入间移动,但如果遵循表5.17的实现,其可以移动到最后一个输入的右端空位处;原始定义中的接受单个输入变量,但如果遵循表5.2的实现,其也可以不需要输入,在一个空位就地产生输出0。

  • 构造单次累加机器,可有

  • 构造减量计数并条件判断机器如下

    0 1 注释
    1 0R2 计数器减1
    2 0Ru 1R3 如果计数器早已为0,结束进入状态u
    3 0R4 1R3 未结束就进入状态4
  • 构造条件计数单次累加机器,它具有如下性质

  • 构造循环累加机器

  • 最后,令,这便是计算乘法的机器

5.4 构造机器计算函数

解:类似题5.3,由循环累乘来实现指数计算。

  • 构造初始化机器,在最右侧添加一个数1

  • 构造条件计数机器,其实现与题5.3中的一致

  • 构造条件倍增机器,,在计数器非0时停机状态,为0时停机状态

  • 构造循环倍增机器,

  • 加上初始化机器完成构造

5.5 设机器定义如表5.24

表5.24

0 1
1 0L3 1R2
2 0L3 0R1
3 0L3 1L3

对于输入,求输出。

解:

  • 先观察输入1且状态为1或2的情形:1R2和0R1,它们构成了一个自循环,交替地将带上的数据设置为,奇数位置为1,偶数位置为0。

  • 这个自循环停止的条件是遇到了输入为0,此时保持输出不变为0,进入了状态3

  • 而一旦达到状态3,其内部又构成了无法停止的自循环,保持带上数据不变并不断左移,直至越界

所以,这个机器会将输入的第偶数个1设置为0,而读头位置向纸带最左侧越界

5.6 设机器定义如表5.25

表5.25

0 1
1 0R2 0R1
2 1R3 0R1
3 1R4
4 1R5
5 1L6
6 0R7 1L6

对于输入,其中,求输出。

解:易知,

因此,分为两种情况:

  1. ,输出为
  2. ,输出为

5.7 构造机器计算函数

解:

  • 题5.3中已构造了乘法器,平方机器可以通过构造

  • 减法器参考后文题5.11构造

  • 取反函数可以通过如下方式构造

    0 1 注释
    1 1R2 跳过第一个1
    2 1L5 0R3 为0则输出1停机,否则进入状态3
    3 0L4 0R3 大于0则变成0
    4 0L4 1O5 回到左端
  • 正则算子可以按照书中定理5.16的方式构造

综上,可以完成平方根的机器构造。

5.8 设机器计算函数,机器计算函数,这里为一元数论全函数。构造机器计算函数

解:构造如下

5.9,试由机器构造机器

解:构造如下

5.10定义如下:

证明:若为Turing-可计算,则为Turing-可计算。

证明:这个问题是定理5.14的特殊情况,仿造其构造的机器为

因此只需要构造加参机器如下:

0 1
1 0R2 1R1
2 1L3
3 0L4
4 0L5 1L4

如此,

5.11 构造机器计算函数

解:思路很简单,每次对减1,直到有一个为0,如果需要,还有再把剩余的擦除。

0 1 注释
1 1R2 跳过首bit的1
2 0R3 1R7 跳到状态7,否则继续
3 0R3 0R4 向右跳过全部0
4 0L5 0R4 向右将全部1置为0
5 0L5 1L6 向左跳过全部0
6 0R12 1L6 向左跳过全部1,最后回到首位停机(状态12)
7 0R8 1R7 向右跳过全部1
8 0R8 0R9 向右跳过全部0,并对减1
9 0L5 1L10 遇到了0表示刚才是0,进入状态5进而停机,否则继续
10 0L10 0L11 向左跳过全部0,然后对减1(此处原本必有
11 0R1 1L11 向左跳过全部1,回到状态1重复循环

5.12 证明:是Turing-可计算的。

思路:数一数输入有几个1就行,奇数个1(对应输入数为偶数)就输出0,否则输出1。因此要在机器内维持一个交替状态,每次遇到1就交变一下计数状态。

证明:构造如下机器计算其特征函数即完成证明之。

0 1 注释
1 1L2 0R2 已有偶数个1。遇到1,偶变奇;否则输出1bit的1进入状态2
2 1O3 0R1 已有奇数个1。遇到1,奇变偶;否则立即再输出1bit的1并停机

5.13 证明:是Turing-可计算的。

证明:只需要证明相等比较多个数相乘是Turing-可计算的。

  • 对任意常数,存在机器计算函数

    通过零函数和后继函数机器,容易构造常函数机器计算

    ,且减法机器题5.11中已构造,故

  • 存在机器计算,其中

    利用题5.3中构造的二数乘法机器,其构造可以如下

综上所述:

  • ,机器计算量集合的特征函数

  • ,可利用如下机器计算其特征函数

5.14是Turing-可计算的,构造机器使其输出的最小零点。

解:记机器计算了函数,且我们使用带位置作为输入。

同时按照题5.7可以构造机器计算函数

另外,构造机器对是否达到零点进行条件停机(if语句),

0 1 注释
1 1R2 必有1 bit的1,跳过之
2 0L3 1L5 非零点则直接转到状态5,否则继续
3 0L4 0L3 是零点,抹去这个数据
4 0Rv 1L4 是零点,移到左边一个数据,并以状态v停机

因此,可以构造

5.15 证明定理5.21中函数为一般递归函数。

证明:需要使用题5.17中的结论。

  • 如果,函数值

  • 否则,可以解构出编码对应的机器的每一行内容

    计算常函数,其可以通过构造,其每行内容显然可以通过由一般递归函数计算。

    ,由于置于之后,其每行的内容需要修改,即增加对应的状态号,这个映射也是一般递归的。

    最终,这个分支的是一般递归的。

综上,分支判断和每个分支的结果都是一般递归的,整个函数当然也就是一般递归函数。

证明引理5.25中的函数为一般递归函数。

证明:使用题5.17中的结论,由,可以通过一般递归函数计算每一行的内容

同时,由也可以通过一般递归函数计算纸带编码长度以及纸带位置

由以上信息,通过循环、比较、分支函数,可以计算

因此,

5.17,证明为Turing-可计算。

证明:证明其特征函数即可。

简化表达起见,约定对于因变量,同名符号也可以表示其关于对应自变量的函数

  • 先应当确定机器的行数,

  • 然后是每一行的编码,

  • 再后是行内解码,对于机器的一行,有

  • 接下来是合法性检查,我们需要进行如下检验

    • 如果,则应该有

      否则,应该有

    • 如果,则应该有

      否则,应该有

    • ,即每一行的状态号都是不同的。

    循环、比较、逻辑或/且都是可以通过一般递归函数实现。

综上,

5.18 由CT证明函数可计算,这里

证明:使用拉格朗日余项的泰勒展开公式,

展开到并在两边同乘

,令

因此,在没有进位的情形下,,但是应该考虑一般情形,应该对其进行修正,防止余项导致的进位而引起的整数部分变化。

修正方法很简单:取足够大的,并保证的个位数不是9。这样做,保证了小数点后一位不是9,避免了0.1以内的误差也能导致进位。

即取

由于无限不循环,因此上述一定有解,即相对于的函数属于

于是,修正后的可以在一般情形下保证

综上,

更好的解法是下面这样的,而且可以证明这个更小的集合,第一章题1.25也有类似如下的更佳解法。

证明:使用拉格朗日余项的泰勒展开公式,

,有

从而

,其是Turing可计算的。

5.19

  1. 什么是停机问题?
  2. 什么是可判定问题(decision problem)?
  3. 停机问题可判定吗?

答:

  1. 先定义停机,机器对于输入停机是指从开始由决定的带位置的完全序列是有穷的。

    同时记集合

    停机问题对任意机器判断命题是否为真。

  2. 可判定问题指一个询问真/假的问题是否可被回答。

    等价表述为,对于集合,如果其特征函数是Turing-可计算的,则称该集合是可判定的。

  3. 停机问题不可判定,即不存在机器能够计算

5.20

  1. 什么是通用Turing机(universal Turing machine)?
  2. 通用Turing机起什么作用。

答:

  1. 通用Turing机是指这样的机器,对任意机器和任何,它有

  2. 通用Turing机表明,只需要一个Turing机,就可以用它模拟任何Turing机进行运算。在现实中,这意味着我们只需要一台Turing机,对它进行编程(类似的构造),便可以完成各种通用任务,而不再需要对每个任务场景使用一台专用机器。