个人答案,仅供参考。
页面含有超多数学公式,打开后需要等待很长时间才能彻底完成渲染和排版,尤其是移动设备。
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 对于输入,其中,求输出。
解:易知,
因此,分为两种情况:
- 当,输出为
- 当,输出为
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
- 什么是停机问题?
- 什么是可判定问题(decision problem)?
- 停机问题可判定吗?
答:
先定义停机,机器对于输入停机是指从开始由决定的带位置的完全序列是有穷的。
同时记集合。
停机问题对任意机器判断命题是否为真。
可判定问题指一个询问真/假的问题是否可被回答。
等价表述为,对于集合,如果其特征函数是Turing-可计算的,则称该集合是可判定的。
停机问题不可判定,即不存在机器能够计算
5.20
- 什么是通用Turing机(universal Turing machine)?
- 通用Turing机起什么作用。
答:
通用Turing机是指这样的机器,对任意机器和任何,它有
通用Turing机表明,只需要一个Turing机,就可以用它模拟任何Turing机进行运算。在现实中,这意味着我们只需要一台Turing机,对它进行编程(类似的构造),便可以完成各种通用任务,而不再需要对每个任务场景使用一台专用机器。