首页 > 其他分享 >[反刍]停机问题

[反刍]停机问题

时间:2023-09-20 12:13:49浏览次数:32  
标签:通用 Halt 反刍 停机 程序 停机问题

简单介绍停机问题:

是否存在一个通用算法来判断, 特定的程序P在遇到输入I后不陷入无限循环, 总能停机?

 

简单分析:

似乎很容易, 有没有循环不是一眼就能看穿吗? 但如果遇到复杂的goto语句群组成的意大利面条式代码, 你还能轻而易举判断吗?

结论是不存在这样的通用算法。下面是我在反复看了多个证明后, 根据自己理解重新组织的证明。后面所有根据别人的思路理解了后重新整理的都会加[反刍]这个标签。

 

反证法:
假设停机问题有解, 则有程序Halt(P,I)可以判断任意的程序P对于任意输入I是否可以停机, 若可停机, 返回True, 否则F

之后, 构建函数N(P)如下:
void N(P){
if (Halt(P,P)==1)
while(1); //不停机
else
return; //停机
}

尝试执行①Halt(N, N), 那么就是要判断下列程序是否停机
void N(N){
if (②Halt(N,N)==1)
while(1); //不停机
else
return; //停机
}

如果①返回真, 那么说明②的值也为真, 那么N(N)应该是不停机, 出现了矛盾的状况。

由此知假设有误, 停机问题无解。

 

总结:"停机问题无解"的结论不是说我们就无法判定某一个程序是否会停机, 而是说不存在通用的算法。因此对于特定程序, 还是有很大概率能分析出来它最终是否停机。

另外, 由于停机问题是基于图灵机的, 而目前一切的可计算问题都有一个图灵机模型。因此, 如果能把某个问题归约(转化)成停机问题, 则可知该问题同样无通用解。

标签:通用,Halt,反刍,停机,程序,停机问题
From: https://www.cnblogs.com/lynnzixing/p/17716988.html

相关文章

  • 转载:图灵的停机问题背后令人着迷的数学(哲学)原理
    之前备考时无意间看到这篇文章【康托尔、哥德尔、图灵——永恒的金色对角线】,令我惊为天人。刘未鹏从一系列深奥的理论背后找到了一条线,用一个至为简单而又至为深刻的数学方法将其串联起来,然我们看到了最纯粹的数学之美!现在终于有时间能够静下心来重新看一遍,顺便写一篇读书笔记......