停止为特定输入/假设计算的问题


19

根据我对停止问题不可计算的证明的理解,该问题不是可计算的,因为如果我们有一个程序P(x)计算该程序x是否停止,则在将P作为输入输入时得到了一个悖论。相同的P,具有:P(P),试图确定P是否暂停使用P本身。

所以我的问题是:暂停程序是否可以由程序P计算为P本身用作输入的所有其他程序?换句话说:止步问题是否仅在这种特殊情况下无法计算,或者证明更笼统,而我缺少某些东西?


我认为您误解了暂停问题不可计算的证据。P(P)仅返回true,因为P始终确定程序是否在有限时间内停止。您需要进行一些棘手的构造才能达到矛盾。
Dan Staley

如果您询问是否有许多程序可以解决暂停问题,我认为您会得到更好的答案,甚至可能是实际上更相关的答案。毕竟,许多程序甚至都可以进行形式验证,当然包括确定它们是否在给定输入下停止。我坚决认为不能确定该小组(因为这相当于解决……,您知道),但是对于绝大多数实际程序,对于相关投入来说,没有障碍可以断定它们是否停止。
彼得-恢复莫妮卡

Answers:


10

如果F是任何可计算函数,则G定义为

Gñ={Fñ如果 ñķv除此以外

对于k,v的任何选择,也是可计算的ķv

基本上,如果你有一个程序P,其计算Gñ的所有ñ的除了ñ=ķ,则可以‘修复’该情况下(例如使用一个if then else),并得到另一程序P,其计算Gñ为全部ñ

因此,如果您可以计算“除一种情况之外”的停止函数,则还可以计算该停止函数(无例外)。由此,您可以像往常一样获得矛盾。

结论:不,您不能将停顿问题确定为“除了一种情况”(也不能确定为“除少数情况之外”)。


1
好的,我想我是从数学上获得的...但是我在想:如果我尝试编写一个计算HP的程序,我将面临哪些具体问题?为什么以及在某种程度上我会理解我无法编写这样的程序?
Alessio Martorana

@AlessioMartorana这取决于:您将如何处理此类问题?一个主要的问题是,即使的输入是非暂停程序,它也必须始终暂停-因此您不能简单地尝试模拟输入程序。P

并假设我们可以看到输入程序的代码?我们不能从代码中查看程序是否停止吗?
Alessio Martorana '18

2
@AlessioMartorana我们确实可以看到代码,但是如果有一个while循环,我们一般不会说太多。while循环可以检查任意数学猜想的所有可能证明,并且仅在找到证明时停止。确定该循环是否停止意味着确定该猜想是否可证明。解决HP问题将使我们得到一台能够回答任何正式数学问题的“是”(可证明)/“否”(不可证明)的机器。那将是不切实际的强大。

1
@AlessioMartorana如果您认为自己编写了一种解决HP的程序,则该程序可能会以两种方式之一失败:对于某些程序,它可能会返回错误的结果(说某些内容不起作用则表示停止,或某些内容不起作用)。则停止运行)和/或您的决策程序本身不会因许多输入而停止运行,因为您无法知道它是否真的不会停止运行或者是否仅需要更多时间来计算答案。
Shufflepants

21

程序P是否可以计算除P本身以外的所有其他用作输入的暂停问题?

不。考虑程序的无穷序列,其中P i是“将头部i  向右移动,然后i  向左移动,然后精确地执行P会做的事情”。这些程序中的每个程序对于每个输入都产生与P完全相同的输出  (包括如果  永远循环则永远循环),但是它们都是不同的程序。P1,P2,P一世一世一世PPP

而且,仅要求在功能上与其自身不等效的程序上工作,就无法解决此问题,因为该属性也是不确定的。当限制在这些实例上时,也许问题是可以决定的(尽管我怀疑不是),但是实例集是不确定的,因此您实际上无法执行限制。P


15
我怀疑您的最后一句话可能是正确的,但我认为这并不是因为属性是不确定的,因此基于该属性限制输入集将使问题无法确定。作为一个愚蠢的例子,如果将输入集限制为终止程序(不确定的属性),则问题将是可确定的(通过始终返回true的程序)。
欧文

3
@Owen当限制本身无法确定时,您不能强加该限制,因此它实际上无法为您提供任何东西。
David Richerby

5

有一些算法可以表明某些类别的程序会停止运行。例如,

  • 可以通过算法确定对有限状态机建模的程序是否停止。
  • 可以通过数学方法确定有界的图灵机是否停止
  • 如果您知道程序所在的复杂度类别,那么您将知道该程序因有限的输入而暂停。

虽然没有算法来确定任意程序是否暂停,但大多数代码都被设计为暂停(像大多数子例程一样)或不暂停(像处理事件的无限循环),并且可以通过算法确定哪个是哪个。换句话说,您可以使用一种算法来回答“暂停”,“不暂停”或“ I dunno”,并且可以将这种算法设计为涵盖足够有用的程序。


这与goto有什么关系?我们不能有一个使用goto的程序,并且只要它对有限状态机进行建模,就仍然可以决定是否暂停?
Bergi

我打算写关于for循环暂停的文章,然后将其更改为仅讨论有限状态机之类的内容
Antonio Perez

4

矛盾证明不一定要详尽无遗,一个反例就足够了。暂停问题无法确定的证明为您提供了P的一个示例,无法确定其暂停属性。该证明并没有说明P是唯一这样的程序,实际上,可能存在构造完全不同的P类的独立证明。


3

证明确实更笼统:停顿问题是赖斯定理的特例,该定理指出

Φ

一种Φ一种Φ

XX

可以通过限制要使用的程序的空间获得一些结果,尽管这些限制必须相当严格。例如,如果确保您可以在100步之内暂停或永久运行该程序,则确定是否暂停该程序很容易。

一个更复杂的情况是,您知道程序最多为100个字符长。由于只有有限的许多程序具有该长度,因此存在一些步骤,这是该程序终止时可以运行多长时间的上限。但是,无法将程序长度k映射到最大步数B B k )的功能。ñķķ


1
从技术上讲,是可计算的:它只是一个自然数,任何自然数都是可计算的。您真正的意思是,任何将程序中的字符数映射到该长度的程序的运行时间上限的函数都是无可争议的。ñ
David Richerby

1
最后一段类似于“忙碌的海狸”。
Evil

关于“相当严格的”限制:总的编程语言是一回事。它们往往要求相对较高的成熟度,因此也许您认为这太过苛刻了,但是有可能在证明可以停止的程序空间中解决实际问题。
本·米尔伍德

包括指向en.wikipedia.org/wiki/Rice%27s_theorem的链接将对IMO有意义。
德米特里·格里戈里耶夫

谢谢,我已经更新了答案。@BenMillwood当然可以,但是鉴于他们的解决方案是“让一切停顿”,我不确定这是否是Alessio真正想要的。但是,如果停止行为是可以决定的但并非微不足道的情况,那将很有趣:也许是Agda +共归类型?
安东·戈洛夫

0

令R为任何递归可枚举但非递归的集合。有无数这样的集合。假设T是一个图灵机,当且仅当k在R中时,它才会暂停输入k。对于任何递归可枚举的集合,这种T都存在。不可能编写出可以解决该T暂停问题的程序。这是因为,任何确定T暂停的算法都将产生确定R中成员资格的算法,如果R是非递归的,则是不可能的。由于存在无数这样的R,每个R都提供不同的图灵机,因此有无限多的图灵机,任何尝试停止程序P都将失败。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.