在研究命题逻辑时,我想到了以下问题:
软件错误是否总是程序和规范之间的逻辑矛盾?
请考虑以下示例: 我们的规范告诉我们“如果前提A和B是真实的,我们就采取行动C。”。
实现如下:
main ()
if A then C
if B then C
很明显,由于(考虑到上面的程序)“ 我们将前提A或前提B为真 ”,因此显然该规范不适合实现。
将我们的规范和程序表示为命题公式,我们得到以下方程式:
我们将规范转换为CNF并应用了分辨率演算,现在我们可以很容易地看到第一个子句与最后一个子句相矛盾。因此,此公式无法令人满意,因此我们的规范与我们的实现相矛盾。
现在是我的问题了(因为上面只是一个例子):
假设有完整的文档,对于每个软件错误都是如此吗?
,如果是这样的话:
如果将完整的规范转换为命题公式,是否可以使软件错误查找过程自动化?
答案 0 :(得分:0)
回答我自己的问题:这称为“模型检查”,在像英特尔这样的大公司的计算机科学中很常见,以检查硬件是否实际在执行应做的事情。
最近,模型检查也开始在软件开发中越来越多地发生。例如,美国宇航局和微软正在广泛使用这项技术。
其基本形式如下:将规范转换为逻辑语句,然后编译器将给定的软件程序转换为树形结构,称为“ Kripke结构”。模型检查器将这些作为输入,并给出规范不完整的反例或发出真值。