Logic 软件验证逻辑

Logic 软件验证逻辑,logic,verification,formal-methods,Logic,Verification,Formal Methods,我正在研究自动化软件验证的要求,即一个接受代码(用C和Java等语言编写的普通过程代码)的程序生成一系列定理,表明每个循环最终必须停止,不会违反任何断言,永远不会取消对空指针的引用等。,然后将其传递给定理证明者,以证明它们实际上是真的(或者找到指示代码中存在错误的反例) 问题是使用什么样的逻辑。两个主要立场似乎是: 一阶逻辑很好 一阶逻辑不够表达,需要高阶逻辑 问题是,两种立场似乎都得到了很多支持。那么哪一个是正确的呢?如果是第二个,有没有基于一阶逻辑的验证器有问题的、您想做的事情的可用示例?您

我正在研究自动化软件验证的要求,即一个接受代码(用C和Java等语言编写的普通过程代码)的程序生成一系列定理,表明每个循环最终必须停止,不会违反任何断言,永远不会取消对空指针的引用等。,然后将其传递给定理证明者,以证明它们实际上是真的(或者找到指示代码中存在错误的反例)

问题是使用什么样的逻辑。两个主要立场似乎是:

  • 一阶逻辑很好

  • 一阶逻辑不够表达,需要高阶逻辑


  • 问题是,两种立场似乎都得到了很多支持。那么哪一个是正确的呢?如果是第二个,有没有基于一阶逻辑的验证器有问题的、您想做的事情的可用示例?

    您可以在FOL中完成您需要的所有事情,但这是大量的额外工作-大量!大多数现有系统都是由没有太多时间的学者/人员开发的,因此他们倾向于走捷径以节省时间/精力,因此被HOL、函数式语言等所吸引。但是,如果您想构建一个供数十万人使用的系统,而不是仅数百人使用的系统,我们相信FOL是一条前进的道路,因为它更容易为更广泛的受众所接受。做这项工作是无可替代的;我们已经做了25年了!请看一下我们的项目(http://www.manmademinions.com)


    你好,亚伦。

    根据我的实际经验,这似乎是“1.一阶逻辑很好”。有关完全以基于一阶逻辑的规范语言编写的各种函数的完整规范示例,请参阅例如或


    一阶逻辑有自动校准器(而不是验证助手),经过多年的改进,可以处理来自程序验证的井属性。例如,这些用途中值得注意的自动校准仪有和。如果这些证明人失败,并且没有明显的引理/断言可以帮助他们,您仍然可以为困难的证明义务启动证明助手。另一方面,如果您使用HOL,则根本无法使用Simplify、Z3或Alt ergo,虽然我听说过用于高阶逻辑的自动校准仪,但我从未听说过它们在程序属性方面的效率受到赞扬。

    我们发现FOL适用于大多数验证条件,但高阶逻辑对于一小部分来说是非常宝贵的,例如用于证明集合中元素总和的属性。因此,我们的定理证明器(用于Perfect Developer和Escher C验证器)基本上是一阶的,但也具有进行高阶推理的能力