Questions tagged «philosophy»

29
为什么写下数学证明比编写计算机代码更能抵御故障?
我注意到,我发现写下数学证明而不犯任何错误要比写下没有错误的计算机程序容易得多。 似乎这不仅仅是我的经验。大多数人在编程时总是会犯软件错误,而且他们让编译器始终告诉他们错误是什么。我从未听说过有人一口气编写大型计算机程序,但一无所错,并且完全相信它不会出错。(实际上,几乎没有任何程序是没有错误的,甚至包括许多高度调试的程序)。 然而,人们可以写整篇论文或数学证明书,而无需任何编译器向他们反馈自己犯错的反馈,有时甚至无法从他人那里得到反馈。 让我清楚一点。这并不是说人们不会在数学证明中犯错误,但是对于即使是有经验的数学家来说,错误通常也不是问题,并且可以在没有诸如编译器指向您的编译器的“外部oracle”帮助下解决。错误。 实际上,如果不是这种情况,那么在我看来数学几乎是不可能的。 因此,这引发了我一个问题:编写无故障的数学证明和编写无故障的计算机代码有什么不同,从而使前者比后者更易于处理? 可以说,事实是人们拥有编译器的“外部预言”,使他们指出自己的错误,这使程序员变得懒惰,从而阻止他们执行严格编写代码所必需的工作。这种观点意味着,如果他们没有编译器,他们将能够像数学家一样完美无缺。 您可能会发现这很有说服力,但是基于我的编程经验和写下数学证明,在我看来,这并不是真正的解释。两项工作似乎在根本上有所不同。 我最初的想法是,可能会有区别,对于数学家来说,正确的证明仅要求每个逻辑步骤都是正确的。如果每个步骤都正确,则整个证明都是正确的。另一方面,要使程序无缺陷,不仅每一行代码都必须正确,而且它与程序中每行其他代码的关系也必须正常工作。 换句话说,如果步骤中证明是正确的,那么在制作工序中的错误不会弄乱一步如初。但是,如果正确记录了一行代码,则在行犯错误将影响行的工作,因此,每当编写行,都必须考虑其与所有其他行的关系。我们可以使用封装以及所有类似的东西来限制这种情况,但是不能完全删除它。XXXÿYYX Y X XXXXXXXÿYYXXXXXX 这意味着检查数学证明中的错误的过程在证明步骤的数量上基本上是线性的,但是检查计算机代码中的错误的过程在代码行数上基本上是指数的。 你怎么看? 注意:该问题有大量答案,可探讨各种事实和观点。在回答之前,请阅读所有内容并仅在有新添加内容时回答。多余的答案或不支持事实的观点的答案可能会被删除。
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.