有没有办法证明程序没有错误?

时间:2013-05-16 10:56:20

标签: proof formal-verification proof-of-correctness

我在想我们可以证明某个程序存在错误。我们可以对其进行测试,以评估它是否或多或少具有抗虫性。

但有没有办法(甚至在理论上)证明程序没有错误?

对于简单的程序,例如“Hello World”,我想我们应该能够做到。 但是大型项目呢?

1 个答案:

答案 0 :(得分:8)

现在有许多不同的形式可以用来证明程序是正确的(例如,证明助理中的形式化,依赖类型编程语言,分离逻辑......)。正如其他人所指出的,没有自动的方法来证明任何给定的程序是正确的(参见停止问题)。但是,那些提到的形式主义通常适用于具体的计划。 (这样的应用程序可能远非自动化,需要大量的创造力。)

另一个非常重要的一点是我们实际上通过证明一个程序是正确的或者你声明证明一个程序没有错误。即使使用正式的方法,通常也没有办法说没有任何东西可能会出错。原因是形式化方法通常表明程序符合规范

您可以将规范视为逻辑公式(表示程序的某些属性)和正确性证明,作为程序满足此公式的正式证明(即,享有相应的属性)。由于这种设置,证据之外甚至没有“考虑”规范之外的所有内容。因此,要真正显示程序没有错误,您首先必须写下一个逻辑公式,说明程序何时没有错误。

因此,可能更诚实地说,正式方法通常能够证明(毫无疑问)程序没有某些类型的错误(取决于使用的规范)。< / p>