太难实现的强大算法-如何确定它们是正确的?


9

我在这里指的是一个问题:功能强大的算法实在太复杂了

如果算法功能强大,但实施起来过于复杂,那么如何确定算法正确呢?如果没有实现,您将无法在现实世界中测试该算法,并且这种复杂的算法可能包含错误,可能会使算法无效。

这是我不明白的。如果您具有证明算法正确性的技术,那么您已经有算法可以实现它,不是吗?否则我们如何确定证明技术是正确的?

对不起,我很抱歉!

来自Kaveh的更新(此处转载,因为参数更好!):

如果您可以在像Coq这样的正式系统中正式证明算法的正确性,那么您也可以提取算法(因为实际上已经实现了算法),但是关键事实是,对于大多数算法,我们没有给出对于算法的正确性,我们使用非正式的正确性证明。这些证明可能是错误的,有时会发生,即使是正式的正确性证明也不能使我们完全确定该算法是正确的。


6
这就是为什么即使在真实机器上很难(正确)实现,我们也拥有证明算法正确性的技术的原因。
拉斐尔

9
我同意拉斐尔。看来这个问题是基于这样一个假设,即算法的正确性通常是通过实现它来证明的,但事实并非如此。证明算法的正确性和实现算法是完全不同的事情,并且一个事物并不表示在任何方向上的另一事物。
伊藤刚(Tsuyoshi Ito)

8
具有复杂性正确性证明的简单算法-您如何知道它们是正确的?仅仅因为算法适用于测试示例并不意味着它适用于所有输入。
彼得·索尔

2
我同意大多数评论,但我认为它们缺少关键点。如果您可以在像Coq这样的正式系统中正式证明算法的正确性,那么您也可以提取算法(因为实际上已经实现了算法),但是关键事实是,对于大多数算法,我们没有给出对于算法的正确性,我们使用非正式的正确性证明。这些证明可能是错误的,而且确实会不时发生,即使是正式的正确性证明也不能使我们完全确定算法是否正确。
卡夫

5
“当心上面代码中的错误;我只是证明了它是正确的,没有尝试过。” 〜唐纳德·
努斯

Answers:


11

几年前,关于这个话题的辩论非常激烈。当所有复杂的证明不正确时,一切就开始了,一些研究人员开始对证明的本质提出怀疑(嗯,我应该说“可证明的密码学”,但是出于普遍性考虑,我没有) 。争议的双方都指责对方误解了这些概念。这是更多信息的链接

证明是我们的(数学)工具,用于证明定理/算法是正确的,但是当它们变得太复杂时,我们可能会溜走并证明错误的事情是对的。在最近100或那么页证明P上≠NP是一个很好的例子。但是,这并不排除证明的本质:证明没有错。

最后一点:我认为研究科学哲学将使我们对此有更多的了解。(在给定的链接下,请参见项目符号“ 我们如何知道数学证明是否正确? ”。)

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.