专栏名称: 人机与认知实验室
北京邮电大学人机交互与认知工程实验室 联系方式:[email protected]
目录
相关文章推荐
51好读  ›  专栏  ›  人机与认知实验室

图灵是如何证明停机问题不可计算的

人机与认知实验室  · 公众号  ·  · 2025-01-22 00:00

正文

请到「今天看啥」查看全文


停机问题(Halting Problem)是计算理论中的一个经典问题,最早由艾伦·图灵在1936年提出。它的核心问题是:是否存在一个通用的算法,可以判断任意程序在给定输入下是否会停机(即是否会停止运行)?

停机问题的表述

给定一个程序 P和一个输入 I,停机问题问: 程序 P是否会在输入 I上最终停止运行?

  • 如果程序 P停止运行,停机问题的答案是“停机”。

  • 如果程序 P无限运行下去,则答案是“不会停机”。

图灵证明了这个问题是不可解的,也就是说, 没有任何通用的算法能够解决所有程序的停机问题

证明停机问题不可计算

图灵的证明是通过一种反证法来实现的。假设存在一个算法 H H 能够判断任何程序是否会停机。我们可以定义一个程序 H(P,I),它接收程序 P和输入 I作为输入,返回两个可能的结果:

  • 如果程序 P在输入 I上停机,返回“停机”。

  • 如果程序 P在输入 I上不会停机,返回“不会停机”。

然后,我们构造一个新程序 D,它的行为如下:

  • D接收一个程序 P作为输入。

  • 程序 D调用 H来判断程序 P是否会停机。当 H(P,P)返回“停机”时,程序 D无限循环(即不停止)。

  • 当 H(P,P)返回“不会停机”时,程序 D 停止运行。

问题在于 :如果我们将程序 D作为输入传递给它自身,即执行 D(D):

  • 如果 H(D,D)返回“停机”,那么根据定义,D应该无限循环。

  • 如果 H(D,D)返回“不会停机”,那么根据定义,D会停机。

这就导致了一个矛盾。无论 H(D,D)返回什么结果,都与程序 D的行为不一致。这个自相矛盾的情况表明, 不可能存在一个普适的算法 H来解决停机问题

直观理解

停机问题的核心是在于任何算法试图普遍判断程序的行为时,会面临无法预见所有可能程序行为的情况。某些程序的行为可能非常复杂,无法通过简单的计算模式预测,尤其是涉及到递归、循环或依赖于输入的动态变化时。








请到「今天看啥」查看全文