研究!rsc公司

关于编程的想法和链接,通过

RSS(RSS)

监视循环侦听器
发布于2008年1月11日星期五。

停止问题不可判定性的初步证明
作者:Geoffrey K.Pullum
数学杂志,2000年10月

没有一个程序能说出另一个程序会做什么。
现在,我不只是断言,我会向你证明:
我会证明,尽管你可能会一直工作到放弃,
你无法预测一个程序是否会停止。

想象一下,我们有一个叫做P的程序
它将在程序的源代码中窥探以查看
没有无限的循环;
如果没有发现循环,P打印单词“好!”。

你输入你的代码和它需要的输入,
然后P把它们都拿出来学习和阅读
并计算事情是否会如期结束
(而不是以他们可能的方式走弯路)。

事实是P不可能是,
因为如果你写下来交给我,
我可以用它来设置逻辑绑定
那会打碎你的理智,扰乱你的思维。

这是我要使用的技巧——而且很简单。
我会定义一个过程——我们将这个东西命名为Q——
这需要一个我们称之为P的程序(当然!)
通过读取源代码来判断它是否循环;

如果是这样,Q会简单地打印“Loop!”然后停止;
但如果没有,Q将直接回到顶部,
然后再次开始,无休止地循环,
直到宇宙消亡,冻结,变黑。

这个名为Q的程序不会停留在货架上;
我会运行它,然后(狠狠地)自己喂它。
当我对Q这样做时,会产生什么行为?
当它读取自己的源代码时,它会做什么?

如果P警告循环,Q将打印“Loop!”并退出;
然而,P应该真实地谈到这一点。
因此,如果Q打算退出,那么P应该说“很好!”
这将使Q回到它的第一行!

无论P会做什么,Q都会独家报道:
Q使用P的输出使P看起来很愚蠢。
如果P做对了,那么它就在它的牙齿上;
如果它说假话,那就是在说真话!

我创造了一个悖论,尽可能简洁——
简单地用你的假设P。
当你假定P时,你就陷入了圈套;
你的假设把你引向了我的巢穴。

那么,如何摆脱这种逻辑混乱?
我不必告诉你;我相信你能猜到。
签署人还原,不可能有
一个像神话中的P。

你永远无法发现机械手段
用于预测计算机的行为。
这是一件无法完成的事情。所以我们用户
必须找到我们自己的漏洞;我们的电脑是失败者!

如果你上过计算理论课程,必须写不可判定性证明,至少它们不必押韵。

(评论最初通过Blogger发布。)

  • 匿名(2011年7月30日上午10:55)令人惊叹的!