关于图灵停机问题不可判定性证明

关于图灵停机问题不可判定性证明

什么是图灵停机问题

概念:图灵停机问题(Halting Problem)是否可判定,形式化而言:\(\exists H \in TM, \forall m \in TM, i \in I\)

\ H(m, i) = \\begin{cases} 1,\& m(i)\\text{ 停机 } \\\\ 0,\& m(i)\\text{ 不停机 } \\end{cases} \\

对角线证明

对角线,实际上逻辑系统中的符号完备问题也是通过该法构造解答的

由于所有的图灵机都可以由 \(01\) 序列编码,所以图灵机是可数的,我们可以枚举出所有的图灵机 \(M_i\)。假设存在某个函数 \(f\),能判定任何图灵机 \(M_i\) 对 任何输入 \(P_j\) 是否停机,那么我们可以构造一个图灵机 \(M'\),使得 \(f(M', P_i) = \neg f(M_i, P_i)\),显然这个图灵机和枚举的所有图灵机都不相同,而且这个图灵机可以经由函数 \(f\) 构造出来(该函数本身也是一个图灵机)。这与列举了所有的图灵机相悖,所以我们可以得出不存在这样的 \(f\),即图灵停机问题不可判定。

使用对角线对图灵机的证法说明了可数的无限中包含了不可数无限的性质,即后者表现在前者中,但是前者所在的系统无法表达这种性质,即斯寇伦佯谬(Skolem's paradox)。

构造法证明

思路与证明:通常使用反证法与构造法。那么,首先假设存在\(H\),接下来构造矛盾(问题是矛盾应当体现在何处,它的根源是什么),从而得出假设为错。考虑引入中间过程\(M(m, i)\)。一般而言,\(M\)应当体现出 递归 或者 否定 的性质,才能体现出矛盾。然而若是一般的递归,则由于\(m\)永远需要一个输入\(i\)。这显然会导致函数参数的不一致。譬如,此处考虑

\M(m, i) = \\begin{cases} 停机,\& \\text{ if } H(m, i) = 0 \\\\ 不停机,\& \\text{ if } H(m, i) = 1 \\end{cases} \\

具体而言,其中的停机可由直接返回表示,不停机由死循环表示。那么,如果使用\(H\)来判断其是否停机,则函数变成\(H(M, m, i)\),显然与题设不符(虽然可以直观地将后二者压缩成一个参数,但是这对\(M\)内部的判断条件并不友好)。所以此处的问题是如何防止参数长度的变化,或者说,如何消去参数呢?答案是,将参数实例化为已有的特征 ,换句话说,将图灵机本身作为参数,因为它既是「机器」又是「语言」,此处即为 自我递归 或者 自我指涉。那么显然地,我们有:

\ M(M) = \\begin{cases} 停机,\& \\text{ if } H(M, M) = 0 \\\\ 不停机,\& \\text{ if } H(M, M) = 1 \\end{cases} \\

显然该图灵机矛盾,故而证否。\(\blacksquare\)

该证明中利用的矛盾是自我指涉,该自我指涉的根源是图灵机的二义性 ,即上文所提:它既是「机器」又是「语言」。其体现在图灵机既作为「执行机构」又作为「输入内容」。

构造法证明之我见

除此之外,我们还可以用假设做什么?上文将参数固化,此处直接获取参数。设i = G(m) := while (i in I && H(m, i) == 1);return i; 用于获取使 \(m\) 不停机的的输入。则显然可知,要么 \((H(G, m) = 1 \leftrightarrow \exists i)\) ,要么 (H(G, m) = 0 \\leftrightarrow \\not \\exists i)。此法也可以避免参数长度不一致的问题。于是可以构建:

\ M(m) = \\begin{cases} 不停机,\& \\text{ if } H(G, M) = 0 ( \\wedge m \\in I)\\\\ 停机,\& \\text{ if } H(G, M) = 1 ( \\wedge m == G(M)) \\end{cases} \\

可以看出判断中并没有出现\(M(m)\)的参数\(m\),这给了我们操作的余地。若\(H(G, M) = 0\),则说明\(M\)不存在令其不停机的输入,然而此处它却停机,故而矛盾;若\(H(G, M) = 1\),则说明\(M\)存在令其不停机的输入\(m'\),此处令其为\(M\)输入,即\(m=m'\),则此时它应该不停机,然而根据定义它却停机,故而矛盾。故而证否。\(\blacksquare\)

该证明为本人在思考如何去除参数,而保证参数长度一致性时想出,既然通过传参的方式行不通,那么就直接在内部生成,也可以看出,这种方法保证了\(M\)参数的任意性。在构造的过程中发现,该生成函数也是一个不知何时停机的图灵机,那么可以基于假设构造矛盾,基本思想仍然是自我指涉,但是和上一证明存在本质的不同。此处,矛盾的根源是纯粹语义 上的循环递归 性,其体现在\(M\)外部的输入和\(M\)内部函数输入构造的对应性 。其次需要说明的是\(M\)的内部使用了\(M\)本身,这是否可以。当然可以,因为里面的M是「语言」。

相关推荐
happymaker06264 小时前
LeetCodeHot100——盛水最多的容器
数据结构·算法·leetcode·双指针·hot100
3DVisionary4 小时前
蓝光三维扫描:磁性轴承全尺寸精密3D检测方案
算法·3d·3d检测·蓝光三维扫描·精密检测·磁性轴承·圆度测量
过期动态4 小时前
【LeetCode 热题 100】三数之和
java·数据结构·算法·leetcode·职场和发展·排序算法
逻辑君4 小时前
Foresight研究报告【20260010】
人工智能·算法·机器学习
weixin_468466854 小时前
大语言模型原理新手入门指南
人工智能·python·算法·语言模型·自然语言处理·transformer·注意力机制
z200509304 小时前
今日算法(回溯找IP,加检测)
算法·leetcode
sheeta19984 小时前
LeetCode 补拙笔记 日期:2026.05.29 题目:1559. 二维网格图中探测环
笔记·算法·leetcode
罗超驿4 小时前
10.滑动窗口解决:无重复字符的最长子串 | LeetCode 3 Java 题解
java·算法·leetcode·面试
罗超驿4 小时前
8.【LeetCode 18】四数之和 —— Java 排序 + 双指针解法详解
算法·leetcode·职场和发展
菜菜的顾清寒4 小时前
HOT100力扣(40) 动态规划-爬楼梯
算法·leetcode·动态规划