缺乏正确性证明的算法示例


18

我们有Hoare逻辑。为什么仍然有可能算法是正确的,但是没有证据证明它是正确的?假设算法用C表示。然后我们可以逐步论证它正在执行应做的事情。

所以我的问题是:

给我一个正确的算法示例,但没有正确性证明。

编辑:我认为有一点背景可以帮助阐明我要去的地方。让我引用斯科特·亚伦森的话:

自1970年代以来,一直有人猜测P NP可能独立于数学的标准公理系统(例如Zermelo-Fraenkel集理论)(即,既不可证明也不可证明)。需要明确的是,这意味着

  1. 尚不存在用于NP完全问题的多项式时间算法,但我们永远无法证明它(至少在我们通常的形式系统中无法证明),否则

  2. 确实存在用于NP完全问题的多项式时间算法,但是我们永远无法证明它有效,或者我们永远无法证明它在多项式时间内停止。

我指的是第二种可能性。由于Aaronson可以如此自信地将其列出为一种可能性,因此我认为必须存在类型2的现有示例。这就是为什么我要问这个问题。但是似乎没有一个快速明确的答案。


17
如果我们没有正确性证明,那么说算法是正确的意味着什么?
David Richerby '17

14
您是说“不可能证明正确性”还是“没有人证明它是正确的”?
gnasher729

12
算法不一定是正确的...假设您有以下几点:(1)早上将空桶放在窗台上。(2)晚上把它取下来。(3)测量水桶中的水量。(4)第二天早上重复。这是对算法的描述,但没有描述任何可能的情况,只要不加任何扩展,就可以称为“正确”。有趣的是,世界上大多数编程代码都是以这种特定方式编写的:它根本不关心其功能的正确性。
wvxvw

@wvxvw那我很困惑,那么算法“正确”意味着什么?如果它按预期执行了操作,那不是说正确吗?如果您的方案的目标是找出每天降雨期间桶中收集的平均水量,那么在这种情况下算法是否正确?
阿卜杜勒

8
@chi,你不明白……不是程序员不在乎代码的正确性,而是某些算法中“正确性”的概念不适用。以某个.NET WindowsForms应用程序为例,该应用程序可以起到一些作用:“将带有此标签的按钮放在这个位置,然后将另一个按钮放在另一个位置,依此类推……”-可能对此有一些解释程序可以执行此操作,在此情况下可能被判断为不正确(例如,图形设计师说它“看起来很丑”),但这已经足够了。
wvxvw

Answers:


50

这是身份函数的算法:

  • 输入:ñ
  • 检查第个二进制字符串是否在ZFC中编码证明0 > 1,如果是,则输出n + 1ñ0>1个ñ+1个
  • 否则,输出ñ

大多数人怀疑此算法会计算身份函数,但我们不知道,也无法在公认的数学框架ZFC中对其进行证明


2
您确定在ZFC中检查第个二进制字符串是否编码0 > 1的证明ñ0>1个是一种算法吗?
德米特里·格里戈里耶夫

23
否,但是检查绝对可以通过算法实现(即,通过图灵机)。实际上,这是我们对证明系统的要求之一-证明有效性可通过算法检查。
Yuval Filmus

6
@Puppy ZFC证明。但是如果(f)不一致,也可以证明0 > 1。当然,几乎所有人都认为ZFC是一致的,但是由于不完全性定理,我们无法确定这一点。¬(0>1)0>1个

1
@Nathaniel一点也不。例如,您可以轻松证明每种教科书算法的正确性。该算法的不同之处在于,它依赖于ZFC 的一致性,而ZFC本身无法证明这一点。
Yuval Filmus

1
@Nathaniel:如果您愿意,让我们继续聊天中的讨论
user21820'2

9

在Hoare逻辑中,大多数算法尚未被证明是正确的。主要原因是截至2017年1月,此类正确性证明非常昂贵,与``单纯''编程相比可能要高几个数量级。有很多正在进行的工作通过自动化来降低这种成本,但这是艰巨的努力。

为什么一个算法可能没有正确性证明,而在实践中比Yuval和chi提到的不完全现象更相关的另一个原因是,我们可能不知道该规范是什么。这个问题有两个方面。

  • 客户不知道他们想要什么。这是软件工程中的一个众所周知的问题,软件工程师已经开发出许多方法来解决此问题。

  • 规范很困难。一个很好的例子是密码算法的正确性。仅在最近,Micali&Goldwasser凭借指定密码安全性的含义才获得了Turing奖。但是请注意,(据我所知)该定义是针对“理论密码学”的,其中您具有安全参数ñ范围是自然数,对手是多项式时间概率图灵机。据我所知(如果我错了,请纠正我),理论与实践之间并不匹配,并且诸如AES和SHA256之类的具体算法不在这些理论规范的范围之内。我不认为此类算法有完整的规范,因此,原则上我们无法从Hoare逻辑的角度验证它们。


AES在密码安全性定义的范围之内。(您确实需要使用具体的安全定义而不是渐近定义,但是如果您想在实践中使用安全性,则无论如何都应该这样做。)
DW

@DW有趣。我不知道这一点。如何规避理论密码学的渐近性质?你能指点我一下吗?具体的密码哈希函数呢?
Martin Berger

en.wikipedia.org/wiki/Concrete_security以及此处列出的参考。哈希函数是一种更为复杂的情况,因为它取决于您使用它们的目的-但复杂性在很大程度上与渐近安全性与具体安全性正交。
DW

2
对于加密,您需要两种算法:一种进行加密,一种进行解密。其中之一不可能是正确的。它们只能成对出现(您证明解密加密的输入会产生原始值)。但是对于加密,您希望它是不可破解的,而这是“正确性”所无法捕捉的。
gnasher729

1
@DW我有些不同意。尽管Rogaway和Bellare的论文很好地暗示了它们以任何方式允许基元的安全证明都是令人误解的。这两篇论文本质上都是关于协议的(例如,它们假定诸如AES,SHA,RSA等原语)是安全的,然后从那里证明事情。证明原语本身安全的本质问题仍然存在。如果您有任何引用证明原语是安全的,我将很感兴趣。例如,第二篇论文假设RSA很难,这是一个开放的问题。
DRF

5

这与基础逻辑的不完整性有关。实际上,Hoare逻辑通常包含一个弱化或“事前”规则 的含义P

PP{P}C{}{P}C{}
需要在一个基本逻辑中进行证明,通常是一阶逻辑(FOL),并且具有诸如Zermelo-Fraenkel(ZF)之类的集合理论公理化。PP

PñP0P1个P2ññ Pñ

中号ñPñ中号ñ Pñ中号ñ Pñ


5

问题:如果每个偶数≥4是两个质数之和,则打印“是”,如果每个偶数≥4不是两个质数之和,则打印“否”。

算法:打印“是”

大多数人认为该算法是正确的。没有已知的证据,而且很可能存在任何证据。


3

任何正确的算法,但我们不知道运行需要多长时间,都可以转换为在保证的时间内停止的算法,但我们不确定它是否正确。

ññ+1个0日志ñ20ñ

P=ñ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.