我们对暂停问题的受限版本了解多少


16

更新这里提出了一个格式更好的问题因为下面接受的答案的注释表明此问题定义不明确)


停止问题不可能发生的经典证明取决于试图将停止检测算法应用于自身作为输入时的矛盾。有关更多信息,请参见下面的背景。

所显示的矛盾是由于自我指称的悖论而引起的(例如句子“此句子不正确”)。但是,如果我们严格禁止这种自我参照(即接受这样的自我参照无法终止的事实),那么我们会得到什么结果呢?其余非自引用机器集的停止问题是否可以停止?

问题是:

如果我们考虑所有可能的图灵机的子集,这些子集不是自引用的(即不将它们自己作为输入),那么我们对该子集的停止问题了解什么?

更新

也许更好地重新定义我所追求的是对定义可决定集合的更好理解。我试图隔离经典的不确定性证明,因为除了您自己运行HALT的情况之外,它没有添加有关不确定性的任何信息。

背景技术: 矛盾的是,有一个图灵机可以决定输入M(它是图灵机的编码)和X的决定,而M X 是否暂停。然后考虑一个图灵机K,它取MX并使用Q来确定M X 是否停止,然后进行相反的操作,即,如果M X 不停止,则K停止;如果M X 不停止,则K不停止。M X QMXM(X)KMXQM(X)KM(X)M(X停止。然后,表现出一个矛盾,因为如果K不停止,它就应该停止,而停止时不停止。K(K)K

动机: 一位同事正在对软件系统进行正式验证(特别是当该系统已经在源代码级别进行了验证,而我们希望对其编译版本进行验证,以消除编译器问题时),在这种情况下,他关心的是一组特定的嵌入式控制程序,我们肯定知道它们不会自引用。他要执行的验证的一个方面是,如果输入源代码被证明可以终止,是否可以保证编译的程序将停止。

更新

根据下面的评论,我阐明了非自引用图灵机的含义。

目的是将其定义为不会导致证明中出现矛盾的集合(请参见上面的“背景”)。它的定义如下:

假设有一个图灵机,其判定用于一组图灵机的停机问题小号,然后š是非自参照相对于Q,如果它排除了调用所有机器Q小号(直接或间接)。(显然,这意味着Q不能成为S的成员。)QSSQQSQS

为了澄清什么是通过调用意味着小号间接:QS

在图灵机上表示在S上调用Q,该图灵机Q具有一组状态和磁带上某个确定的初始输入(对应于S的任何成员),磁头最初在该输入的开头。一种机器W¯¯所调用Q小号 “间接”是否存在的步骤的(有限的)序列,其W¯¯将采取使配置“同态”到的初始配置Q 小号SQSWQSWQ(S)

更新2

从下面的论证中,有无数的图灵机执行相同的任务,因此不是唯一的,我们通过说Q不是单个图灵机,而是所有计算的(无限)组来更改上面的定义。相同的功能(HALT),其中HALT是决定Turing机器在特定输入上停止的功能。QQ

更新3

图灵机同构的定义:

如果A的过渡图与B的过渡图同构,则TM A与TM B是同构的,这在标准意义上具有标记节点和边的图的同构意义上。TM的过渡图(V,E)使得V =状态,E =状态之间的过渡弧。每个圆弧都标有(S,W,D),S =读取磁带的符号,W =要写入磁带的符号,D =磁头显示移动的方向。


5
“剩余的非自引用集合”在我明智地讨论该集合之前,我想对“自引用”进行定义。但是,我认为定义这将是一件棘手的事情?
山姆·尼德

1
有一些关于可证明的停止程序的研究(但是,该类别并不包括所有停止程序)。基本上,它们是一个程序对,它是一个暂停的证明。例如,如果我没记错的话,Agda只允许暂停的程序。我认为从事逻辑和编程语言工作的人对此还有更多话要说。
伊藤刚(Tsuyoshi Ito)2010年

1
@M。阿甘 现在我愿意“所调用的定义小号间接,”我怀疑是因为很难定义为原来的“自我参照” :)小号
罗布·西蒙斯

2
这就提出了一个有趣的问题:所有不可计算性(不确定性)证明都可以追溯到Cantor的对角化方法吗?是否存在不直接或间接不依赖对角化方法的不确定性证据?
Mohammad Al-Turkistany 2010年

Answers:


9

我认为要解决“定义明确”的问题还需要花费更多的工作。特别是,这是有问题的:

在图灵机Q上表示在S上调用Q,该图灵机Q具有一组状态和磁带上的某些可能的初始输入(对应于S的任何成员),磁头最初在该输入的开头。如果W需要采取(有限的)一系列步骤使机器的配置“同构”为Q(S)的初始配置,则机器W会“间接”调用S上的Q。

一个问题是,有无限多的图灵机计算相同的功能。在标准对角线化参数中,我可以将Q子例程替换为HALT的另一个决策程序,因为它们无限多。或相当于HALT的函数。因此,对我来说,如何定义“间接调用”的概念尚不完全清楚。

一个不同的问题可能是:可以确定哪些图灵机停止问题?这里有很多答案:资源受限的TM(例如,仅使用f(n)空间,其中f是某些特定的可计算函数),TM受到某些特定方式的操作限制(例如,读头仅以一种方式移动)等但是,另一个有趣的问题是,该受限集中的成员资格是否可以确定,或者您是否必须将自己限制为“承诺问题”,即您只能保证对某些“承诺的”输入子集给出正确的答案,而无需验证成员资格。


H

这不是那么简单。现在,您的定义是自相矛盾的,因为您正在寻找可计算的HALT。但是,如果这是可计算的,那么任何可计算的函数都可以等效于它。但是,如果您的输入集中包含半可计算的问题(TM),则您会产生矛盾,因为为此类TM确定暂停问题将为您提供解决该问题的决策程序。
Mark Reitblatt,2010年

1)不可争议的HALT是否意味着不确定性?我以为存在这样一种可计算的HALT,希望产生矛盾。2)我不熟悉所有可计算函数在计算上都彼此等效的概念,我在此引用您的意思,这意味着它是解决HALT问题的函数。显然,λx.1是可计算的,但它不能决定HALT。如果我错了请指正。关于半可计算问题,HALT可以采取无数步骤,但这仍不会导致原始证据表明HALT不可决定。
M. Alaggan

1)对。但是问题是试图定义您的“非自我引用”概念。就像我所说的那样,它是一个弱约束,它允许对角化,或者是一个强大的约束,它消除了一切。2)很简单。“可计算的等效”大致意味着存在一个可计算的映射,该映射可保留答案。但是,如果我可以计算出答案,就可以作弊并使映射变得微不足道。3)如果TM决定HALT本身并未终止,则它不是HALT的决定者。
Mark Reitblatt,2010年

其他令人困惑的是TM与它们所计算出的决策问题的混合。谈论一种TM在计算上是等效的是不正常的。而是,由它们计算的函数可以是等效的(或相等的)。问题在于,要说一个TM不模拟另一个TM很难定义,而又没有给出具体的方法来分离它们所计算的功能。例如,Log-space TM无法模拟解决EXP-space问题的TM。
Mark Reitblatt,2010年

9

如果我正确地理解了您的动机,似乎这是一个“编译器正确性”问题,而不是“限制中止问题”问题。您已经为某些源代码级程序Prog证明了一个属性(终止),然后您希望将该属性扩展到已编译的代码,以获得与named(Prog)相同的属性。但是,编译器可以(通常)随意执行愚蠢的事情,例如实现图灵完整的运行时(例如JVM),将终止程序编译为JVM字节码,然后转储出可执行文件以启动JVM并将其提供给您编译后的字节码。

在实践中,很可能会利用关于编译器工作方式的隐式知识来实施一些验证过程,该过程几乎可以证明编译程序在给定正确的源程序的情况下是正确的(实际上,许多针对程序的自动验证工具正在利用隐式知识程序员头脑中的算法编码“编译器”的概念。但是,通常来说,您可能正在研究编译器正确性的问题。据我了解,这样做有两种经典方法。

一种选择是让编译器将程序Prog作为输入,并将证明终止(Prog),然后输出已编译(Prog),然后终止(compiled(Prog)) -后者是可以独立于其进行再次检查的证明。编译器。我相信,有关这方面的经典论文是Necula和Lee的《认证编译器的设计与实现》

另外,您可以证明有关函数compiles()的事实-每当compiles()提供终止输入时,它都会产生终止输出。Xavier Leroy的CACM文章,即对实际编译器的形式验证,是这种对编译器正确性的思考方式的可访问性介绍。

(附言:我希望这个答案对您有所帮助-我认识到它与您提出的问题有些不同,所以请让我知道我是否偏离基准和/或重复您已经知道的事情。)


感谢您的出色回答。这肯定对我的同事有用。但是,我(独立于我的同事)对暂停问题的证明的理论含义更感兴趣,如果我们摆脱了显示矛盾的案例,那么对于暂停问题的可判定性我们还能了解什么?
M. Alaggan
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.