很容易理解为什么暂停问题对于不纯程序(例如,具有I / O和/或依赖于机器全局状态的状态的程序)无法确定的原因;但是从直观上看,似乎可以通过例如静态分析来确定在理想计算机上停止纯程序。
实际上是这样吗?如果不是,那么哪些反例或论文反驳了这一主张?
很容易理解为什么暂停问题对于不纯程序(例如,具有I / O和/或依赖于机器全局状态的状态的程序)无法确定的原因;但是从直观上看,似乎可以通过例如静态分析来确定在理想计算机上停止纯程序。
实际上是这样吗?如果不是,那么哪些反例或论文反驳了这一主张?
Answers:
这是通过减少暂停问题而无法确定的证据。
减少:由于机器和输入,建立一个新的图灵机不读任何输入,但是写入和在磁带上,并模拟的,直到暂停。
新机器的行为与输入磁带无关,因此它是纯图灵机,仅适用于静态分析。如果静态分析足够,那么它可以显示是否停止,这将表明上是否停止,这将解决不纯机器的停顿问题,我们知道这是无法确定的,因此您的问题也无法确定。
不,不是,而且它不依赖于I / O。
一个简单的反例:编写一个程序以找到一个完美的奇数(这是一个开放的问题:我们尚不知道是否存在)-它不需要任何输入,也不会执行任何不纯的任务;找到一个数字时它可能会停止运行,或者可能无限运行(在这种数字不存在的情况下)。现在,如果静态分析的功能足以确定停止情况,它将用于回答此问题(以及更多问题),其中停止将意味着存在该数字,而没有停止将意味着没有该数字,但是不幸的是,静态分析没有那么强大。
对角化 的经典证明是一台纯机器,不仅是一台纯图灵机,而且也不依赖于“开放问题”。
例如,执行Collatz猜想的Turing机器具有未知的停止状态,但是这取决于我们对Collatz猜想的无知,有一天我们可以证明Collatz是正确的,然后我们就能够决定该猜想的停止状态(对于某些输入而言,要么不停止,要么始终停止)。
因此,Collatz猜想可能已经回答了您的问题(至少暂时是这样),但这取决于我们不知道的事情。相反,经典证明是一个已解决的问题:我们已经知道这是无法确定的。
仅作记录之用,关于暂停问题无法判定的标准证明依赖于与quines相同的想法:可以编写一个程序,该程序的某些子项将评估整个程序的源代码。然后,如果有一个函数halts
,在给定程序源代码的情况下,如果该程序在所有输入上都停止,则返回True,否则返回False,这将是合法程序:
prog() = if halts "prog" then prog() else ()
在哪里"prog"
可以算出源代码的表达式prog
; 但是,您可以很快看到prog
(如果所有输入)如果不停止就停止(这是矛盾的)。此证明中的任何内容均不以任何方式依赖I / O(您需要I / O来写一个Quine吗?)。
顺便说一句,您可能希望查看“基于对话框的I / O”以获取进一步的证据,证明I / O与您的问题完全无关(基本上,执行I / O的程序可以简化为将输入作为输入的程序。 (显式)函数参数,并以惰性语言返回输出(作为(显式)附加结果)。不幸的是,我现在无法在网络上找到一个合理的,没有偏见的页面。