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