健全性和完整性

Soundness and Completeness

我正在进行软件分析 class 并被问到以下问题。它与编程逻辑有关,因此我将其发布在这里的原因。 (我也将其发布到数学堆栈溢出站点。):

假设 SHADED 部分表示所有不包含被零除错误的程序,黑色矩形内的 UNSHADED 部分表示所有包含此类错误的程序。

设 A1、A2 和 A3 是检查被零除错误的不同程序分析。每个分析都接受(即声明它没有被零除错误)或拒绝(即声明至少存在一个被零除错误)给定程序。

对于每个分析,被该分析接受的程序包含在相应的椭圆内,被该分析拒绝的程序包含在相应的椭圆外。

参考问题4,假设我们设计一个分析A4,在输入程序P上表现如下:

if (A1 rejects P) reject P;
else if (A3 accepts P) accept P; 
else run forever; 

A4好听吗? A4完成了吗?

我选择 A4 是合理的,因为 A1 接受有效的程序并拒绝无效的程序。这被标记为正确的。我说它不完整,因为 A4 不接受确实是有效程序但被标记为错误的程序。想知道是否有人可以为我阐明这一点?提前致谢。

我认为它会完成。假设您有一个程序会出现 DBZ 错误,而我们想要对此进行测试。将该程序发送到 A1。 A1 包含有和没有 DBZ 的两个程序的 space。所以它可能被 A1 接受,也可能被 A1 拒绝。如果它被 A1 拒绝,那么我们可以拒绝该程序,因为它有 DBZ 错误。如果它没有被 A1 拒绝,则转到 A3,它只接受没有 DBZ 错误的程序。请记住,这是针对未被 A1 拒绝的程序。如果程序被 A3 接受,那么我们就知道它没有 DBZ 错误。如果它在这里也被拒绝,我们知道它包含一个 DBZ 错误。

本质上单凭A1并不能完全判断是否录取。但是由于A3只包含了space个可以被接受的程序,如果在A1和A3中都被接受了,我们就可以推断这是一个有效的程序。

从这个解释看来,如果一个程序是有效的,即使 A1 没有发现该程序无效,它也会被 A3 接受,因为 A3 只会接受有效程序,这与你的相反说到为什么A4不能完整。

如果我应该澄清这个答案中的一些要点,请告诉我。