系统的完善性和完整性

The*_*Kid 7 theory logic type-systems

首先是一些术语(从这里借用,第14页):

程序是一个错误的程序.

程序是没有错误的程序.


所以有四种类型的程序:

一个积极的计划,分析为积极 - >真阳性(TP).

一个积极的计划,分析为负面 - >假阴性(FN).

阴性程序,分析为阳性 - >假阳性(FP).

负面程序,分析为否定 - >真阴性(TN).


如果系统从不接受积极的计划,那么它就是健全的.

如果系统从不拒绝否定程序,则系统完整.


所以根据我上面所写的内容来判断:

A complete system accepts FN and TN programms.
A sound system also accepts FN and TN programms.
Run Code Online (Sandbox Code Playgroud)

一位同事告诉我,声音系统也接受FP程序.有人可以证实这一点并解释他们为什么这么做

Rob*_*vey 13

这本书解释如下:

健全性可以防止漏报和完整性,防止误报.

因此,为了使系统健全,它不需要防止误报,而只能防止误报.为了防止误报,必须完整.

本书以类型系统为例进一步解释:

在现代语言中,类型系统是合理的(它们可以防止它们声称的内容)但不完整(它们拒绝不需要拒绝的程序).健全性非常重要,因为它可以让语言用户和语言实现者依赖X从未发生过.完整性会很好,但希望在实践中很少会不必要地拒绝程序,在这种情况下,希望程序员很容易修改程序以便进行类型检查.

类型系统不完整,因为几乎任何你可能想要静态检查的东西,都不可能实现一个静态检查器给出你的语言中的任何程序(a)总是终止,(b)是健全的,(c)是完整的.因为我们必须放弃一个,(c)似乎是最好的选择(程序员不喜欢可能不会终止的编译器).


pro*_*eek 6

假设一个房主设置了警报系统来检测小偷。不喜欢因非法入侵以外的其他原因而误报的业主,会使系统变得不那么敏感,在这种情况下,当警报响起时,就意味着“警报意味着有入侵者”,有没有发现熟练的窃贼的危险。可以忍受误报但从不希望入侵的细心谨慎的所有者可能会使系统更加敏感。在这种情况下,“没有警报意味着没有入侵”。

第一个从不接受误报(在本例中为误报)的系统称为健全系统,这意味着不存在类型 1 错误。永远不会错过入侵的第二个系统,换句话说,永远不会接受假阴性,称为完整系统,这意味着没有类型 2 错误。健全并不能保证完整性,反之亦然。完善的报警系统灵敏度,无误报,无漏入侵,使系统健全完善。

这个页面(http://ubccpsc311.blogspot.jp/2010/11/7-ways-to-approach-soundness-and.html)给出了关于健全性和完整性的七个观点。另请参阅算法的健全性和完整性,它表示完整算法总是在健全算法永远不会给出错误答案(永远不会返回错误结果)时找到答案。这个https://softwareengineering.stackexchange.com/questions/140705/what-does-it-mean-to-say-an-algorithm-is-sound-and-complete也可能有所帮助。

从内容的综合方法,以软件工程显示了静态分析仪例如另一个角度。

在此处输入图片说明

书中,soundness captures the occurrence of false positives换言之,有了完善的音响系统,其实是警告的时候也没有报错:less soundness implies more false positives

话虽如此,我认为作者的评论可能是一个错字,它应该写成“健全性防止误报......”。可能,在作者的领域中,健全性意味着不同于通常使用的意思,但我不确定。

理解这些定义的一个好方法是,健全性可以防止误报,完整性可以防止误报。

另外,我认为 OP 的评论也令人困惑:

A system is sound, if it never accepts a positive program.
A system is complete, if it never rejects a negative program.
Run Code Online (Sandbox Code Playgroud)

更好/正确的描述可能是

A system is sound, if it never accepts a false positive program.
A system is complete, if it never accepts a false negative program.
Run Code Online (Sandbox Code Playgroud)