检测确定性程序(即状态机)是否处于等效于解决暂停问题的无限循环中?
我提出了一个解决方案,我不确定为什么它不起作用:
我认为这不起作用......但为什么?
这似乎是一种非常合理的方法来检测程序是否处于无限循环中(例如,特别是如果你存储哈希而不是内存本身,虽然这不会100%准确)...它有什么问题,如果有的话?
答案 0 :(得分:3)
理论上,不等同于暂停问题,因为真实计算机具有有限数量的可能状态(即使它很大)。暂停问题适用的图灵机具有无限存储空间。
但是,让我们进一步探索你的想法。您还必须拍摄“隐藏”状态的快照:CPU的程序计数器和其他寄存器,并且必须在每条指令之前拍摄快照。 (如果内存快照相同并且即将执行相同的指令,程序将处于无限循环中。如果内存内容相同,那么程序将无效,但是除了最后一个内容之外还会执行其他操作。你看到同样的快照的时间。)
在实践中,即使是非常小的计算机也有如此多的潜在状态,您永远无法存储(甚至没有哈希!)所有快照。例如,即使是具有64kB RAM的古代商品64的小型计算机也具有256 ^ 65536个潜在状态(不包括5个CPU寄存器)。可能如此长的跟踪周期在时间和空间上都是绝对不可能的。
答案 1 :(得分:2)
解决方案即使在原则上也不会起作用。图灵机不必处于完全相同的状态(相同配置的磁带)进入无限循环。
您的算法可能适用于上下文相关语言和线性有界自动机,但如果您不知道TM需要多少磁带,您永远不会知道您是否有无限循环或即将击中顶部。请注意,由于各种原因,您的方法显然适用于真实计算机......其中最主要的是您的计算机不如(大)有限自动机强大。