X(X,X)的结果是什么?

时间:2010-03-23 13:28:54

标签: algorithm

研究纯数学的朋友让我考虑以下问题。

假设有一个名为X的算法有2个输入:A和a_1 ... a_n,其中'A'代表仲裁算法,'a_1..a_n'是A的输入.X接收A及其如果带有a_1..a_n的A可以终止,则返回true;如果带有a_1..a_n输入的A落入无限循环(永不结束),则返回false。像这样:

A(n):
   while(n<5):
      write "I'm immortal!"

X(A,6)的结果为true,X(A,2)为false。

那么X(X,X)的结果是什么?

另外,你知道谁是第一个引入这个问题的人吗?

经过一个小时的深入思考后编辑:你能在这里看到与Russel悖论相当的东西吗?

7 个答案:

答案 0 :(得分:19)

如果存在,则返回true。证明:假设它返回false。然后它陷入无限循环,永远不会结束。这是一个矛盾。

但更有趣的是程序Y可以从X派生,并且当且仅当其参数停止时才停止。然后Y(Y,Y)产生矛盾:要么停止(意味着它不停止),要么它不停止(在这种情况下它会停止)。因此X不存在。细节被省略了,例如我们已经挥了挥手,看看X和Y是否只取一个参数。

与这个问题相关的问题在19世纪正在讨论中:David Hilbert的第10个问题(在1900年提出)要求一种算法来确定任何给定的丢番图方程是否有解。事后看来,这可以表示为暂停问题的一个特例:找到一个算法来确定强力搜索解决方案是否停止。因此X将解决第10个问题,但X的不存在使第10个问题开放。经过Martin Davis,Julia Robinson,Yuri Matiyasevich等人20年的工作,它终于在1970年关闭。希尔伯特在1928年完全陈述了“Entscheidungsproblem”,这与停止问题的想法相同,但是用于测试算术中的陈述是否正确,而不是测试程序是否停止。

我认为艾伦·图灵发明了必要的术语来陈述停止问题,并证明了结果(1936)。但是Alonzo Church已经证明了lambda演算中存在不可判定的问题(也是1936年),而Kurt Goedel的不完备性定理(1931)做了很多基础工作,使用他的技术来获得这些可计算性结果可能在两个案例中都比较少问题一直存在(即发明lambda演算和图灵计算模型)。

Russell Paradox(1901)的相关性:是的,证明与它们具有相同的形状。在这两种情况下,您都会考虑一个对象,它表示在包含对象本身的类上评估的谓词(“所有集合的集合,对程序起作用的程序”)。你假设它存在,允许你通过修改谓词来构造一个新对象(“所有不是自身成员的集合的集合,当且仅当它的输入没有停止时才停止的程序”),当你尝试时产生矛盾评估新的谓词“适用于自己”。这反驳了前提(“存在一组所有集合”,“存在一种测试暂停的算法”)。

Topos理论(或其他数学结构分析)中有可能形成相似性,但我不知道那会是什么。

结果之间存在显着的实际差异:X的不存在仅仅证明了停止问题不是由算法决定的,所以如果你是David Hilbert你必须重新评估你的期望什么是数学可能的。 Russell Paradox证明当时使用的 理论是不一致的,所以如果你是Georg Cantor,你必须重新评估你曾经写过的每一个证据。这引发了第一个正式的公理集合理论,以及Cantor,Dedekind和其他集合理论家的工作的重新陈述,他们一直在研究那些承认矛盾的集合的天真定义。

答案 1 :(得分:11)

答案 2 :(得分:8)

这不仅仅是the halting problem吗?

答案 3 :(得分:4)

这个问题没有答案。程序X不存在。阿兰图灵证明:

  

没有完全可计算的功能   那决定是否是任意的   程序我停止任意输入x

见证明: http://en.wikipedia.org/wiki/Halting_problem

总之,Alan Turing将暂停问题定义为“给定程序描述,确定程序是否完成运行或将永远运行”。这里的问题是,如果输入是程序本身,那么该程序的输出是什么。对于这个问题没有实际答案的原因是,正如Alan Turing所证明的那样(参见本答案中的链接),这样的程序不存在:“没有完全可计算的函数来决定任意程序是否在任意时停止输入x“

答案 4 :(得分:3)

X有两个输入,因此X(X)没有意义,因此X(X,X)也没有多大意义。

哪个好,因为X无论如何都不存在(见其他答案):)

答案 5 :(得分:1)

这听起来像是停机问题,为了回答你的问题,我相信是Alan Turing首先讨论过它(虽然我不确定他是否真的把它称为“停机问题”)。

答案 6 :(得分:0)

假设X存在的问题,那么:

假设X是我们的“不可能”算法,它通知任何其他算法A是否为给定输入完成。如果我们提供X与X本身作为分析算法和一组输入Y在X中测试,如:

X(X,Y)

我们知道它会返回true 。现在,假设X接收输入X本身,这意味着,

让我们看看当X分析X时X是否结束......这是真的,因为X可以分析任何东西。换句话说,如果存在X,则 X(X,X)将为真。