停机问题

D_DreKing 2017-10-30 06:13:09
设程序halts(P,X)总是正确地判定程序P在其输入X上是否停机:
若停机,则返回yes;否则死循环,返回no。
设另有一程序:
diagonal(Y){
a: if halts(Y,Y) then
goto a;
else halt;
}
diagonal(diagonal)是否停机?
它停机当且仅当halts(diagonal,diagonal)返回否,也就是:
diagonal停机当且仅当它自己不停机,矛盾!
即:halts(P,X)并不存在,停机问题是不可解的!

我有一个地方不是很理解,halt函数那么假设ok,没有问题。但是diagonal这个函数是什么意思?他那个判断if halt那块,如果我人为的写成
diagonal(Y){
a: if halts(Y,Y) then
halt;
else goto a;
}
不就不会产生矛盾了吗?
...全文
356 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
xskxzr 2017-10-31
  • 打赏
  • 举报
回复
人家就是通过构造矛盾来证明假设错误。这是反证法的基本原理。

15,440

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧