在研究命题逻辑时,我提出了以下问题:
软件错误总是程序和规范之间的逻辑矛盾吗?
考虑以下示例:我们的规范告诉我们“如果前提 A 和 B 为真,我们会执行动作 C ”。
其实现如下:
main ()
if A then C
if B then C
很明显,可以看到规范不适合实现,因为(考虑上面的程序)“如果前提 A 或前提 B 为真,我们会做 C ”。
将我们的规范和程序表达为命题公式,我们得到以下等式:
我们将规范转换为 CNF 并应用解析演算,现在我们可以很容易地看到第一个子句与最后一个子句相矛盾。因此这个公式是不可满足的,因此我们的规范与我们的实现相矛盾。
我现在的问题是(因为上面只是一个例子):
假设一个完整的文档,对于每个软件错误都是如此吗?
如果是这样:
如果我们将完整的规范转换为命题公式,我们是否可以自动化软件错误发现的过程?