有没有办法证明我的C ++程序的属性?

时间:2014-12-14 14:01:48

标签: c++ verification coq proof-of-correctness

我理解像Coq和Idris这样的语言如何用来证明用这些语言编写的程序的属性(根据我在这个主题上的经验来判断)。但是我想知道是否有一种平易近人的方式来做同样在外部,在已有的代码库上。

有没有办法使用像Coq这样的工具或其他专业工具来证明用C ++编写的算法的正确性?如果是这样,这样做的要求是什么?

1 个答案:

答案 0 :(得分:5)

这取决于你的意思"证明财产"。据我所知,有许多静态分析工具可用于检查C程序的简单属性,它们在表现力,易用性,分析的完整性等方面差异很大。它们通常用于检查程序是否免费运行时错误,但不是非常适合检查完整的功能规范。对于这种属性,您可能不得不诉诸一个更强大的证明器,要求您手动记下证明,而不是自动为您检查。

既然你提到了Coq,我想推荐两个基于Coq的工具来验证C程序(但它们不能使用C ++):在后一类中,有{{3}关于嵌入在Coq中的C程序的推理逻辑。您可以使用它来编写有关程序行为的证据,并让Coq检查它们,包括显示程序是否符合其功能规范。在前一类中,有Verified Software Toolchain个自动静态分析工具,用于检查程序是否存在运行时错误。这些工具的一个很好的特点是它们本身就是经过验证的程序,这意味着您可以对它们提供的分析有更大的信心。

其他有趣的工具包括Verasco,如上面评论中所述,以及Frama-C,来自Microsoft的静态分析器。但是,他们不能使用C ++。