赖斯定理感到困惑


37

摘要:根据赖斯定理,一切都是不可能的。但是,我一直都在这不可能的事情


当然,赖斯定理并不仅仅是说“一切皆有可能”。它说得更具体一些:“计算机程序的每个属性都是不可计算的。”

(如果要分割头发,则每个“非平凡的”属性。也就是说,所有程序具有或没有程序具有的属性都是微不足道的。但是其他任何属性都是不可计算的。)

这就是定理说的或似乎要说的。大概许多非常聪明的人已经仔细验证了该定理的正确性。但这似乎完全违背了逻辑!程序具有众多特性,可以轻松计算!!例如:

  • 程序在暂停之前执行多少步?要确定此数字是有限的还是无限的,恰好是停止问题,该问题不可计算。决定此数字是大于还是小于某个有限的是微不足道的!只需运行该程序最多n步,然后查看它是否停止。简单!nn

  • 同样,程序在前m个执行步骤中使用的存储单元是否少于n个?微不足道的。m

  • 程序文本中是否提到了名为k的变量k?简单的文本分析将揭示答案。

  • 程序是否调用命令σ?再次,扫描程序文本以查找该命令名称。

我可以看到很多性能之间一下非可计算为好; 例如,一个完整的程序运行会执行多少次添加?嗯,这几乎与询问程序执行多少步骤相同,这实际上是“停止问题”。但是看起来确实有很多程序属性,它们确实非常容易计算。然而,赖斯定理坚持认为它们都不是可计算的。

我在这里想念什么?


8
“根据赖斯定理,一切都是不可能的。” - 不。“计算机程序的每个属性都是不可计算的。” - 不。但是,您并不孤单:大多数学生都会遇到这种误解。
拉斐尔

Answers:


36

为了便于讨论,“程序”是一段代码,始终以整数作为输入,并且可以永久运行或返回整数。我们说,如果两个程序和计算相同的函数,则它们在扩展上相等,即,对于每个数字,和都将永远运行,或者它们都终止并输出相同的数字。g n f n g n fgnf(n)g(n)

一个伸展性质的节目是一个属性尊重伸展平等,即如果和是外延上相等的,那么,他们要么都具有属性或两者没有它。˚F PPfgP

以下是一些扩展属性的示例:

  1. 程序在步内停止。(我们总是可以将程序修改为与运行时间更长的扩展程序相等的程序。)n
  2. 该程序在执行的前步骤中使用少于存储单元。(我们总是可以将程序修改为扩展上相等的程序,这样它就可以毫无理由地占用一些内存。)nm
  3. 程序文本中提到了一个名为的变量k。(我们可以重命名变量。)
  4. 程序是否调用命令。这可能取决于是什么,但是如果可以某种方式模拟它,那么我们就可以逃避并且仍然拥有一个与原始程序的程序。σ σσσσ

我相信您已经注意到,我恰好列出了您所称的赖斯定理的反例,其中说:

定理(Rice):程序的可计算扩展属性,可以包含所有程序,也可以不包含任何程序。

还有另一种解释方式:您必须区分程序及其计算的功能。许多不同的程序会计算相同的功能(它们在扩展上都相等)。赖斯定理是关于函数的属性,而不是关于计算它们的程序的属性。


我无法得到这个答案。(对不起,如果我也提出同样的要求,那么很高兴澄清这一点)。它说您可以通过更改程序的语法来修改这些程序以获取扩展等效项,但是首先如何检查它们是否与扩展等效?您不能使用程序进行比较,如果这些程序功能通常都具有该属性,那么当您说“修改”时,我认为这是可能的,因为例子很简单,(您是否应该添加“仔细修改”?还是使用“好” IDE呢??。。)我认为,一旦进行了修改,就无法进行总体检查,也许莱斯可以。
Hernan_eche 2014年

1
通常,通过证明是这种情况来检查两个特定程序在扩展上是否相等。您是否反对这样一个事实:即使计算机无法“检查”所有值的相等性,所有整数也都为?希望不会。编写一个计算布尔值的程序与证明某个语句具有某个真值之间有区别。我们可以证明某些事情,但无法计算(例如两个特定程序在扩展上相等,或者加法是可交换的)。n+m=m+n
Andrej Bauer 2014年

另外,您在推理中正进行着一种怪异的推理飞跃:由于扩展相等性不可决定,因此莱斯的定理可能是错误的。为何如此?仅仅因为扩展相等性是不确定的,并不意味着我们没有任何实例可以确定。我提到的那些-我们可以决定。
Andrej Bauer 2014年

36

基本误解:

计算机程序的每个属性都是不可计算的

那不是赖斯定理在说的。它讨论了函数的属性,以及计算该函数程序集是不确定的。正式地,给定集合PRE

{MfMP}

是不可决定的。对于您提到的属性,您不会找到合适的,程序集具有此的形式。一个功能的某些程序可能具有该属性,而其他功能(对于同一功能)则可能没有。请参阅此处的一些示例。P

赖斯定理涉及语义属性(由程序计算的函数的属性,例如域或值范围)。您所指的是语法属性(程序的属性,例如运行时或使用了多少个变量)。

语法特性似乎并不为人所知。看到这个问题


1
在大约第一句话之后我迷路了。抱歉。有人可以详细说明语义和句法属性之间的区别吗?
MathematicalOrchid

@MathematicalOrchid:您可以放心地忽略该句子;第一段包含您需要的所有信息。无论如何,我会详细说明。
拉斐尔

2
语义=关于程序的作用。语法=关于程序的外观。
reinierpost 2013年
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.