Logic 系统的健全性和完整性

Logic 系统的健全性和完整性,logic,theory,type-systems,Logic,Theory,Type Systems,首先是一些术语(借用自第14页): 正的程序是有错误的程序 负片程序是没有错误的程序 因此有四种类型的程序: 一个阳性程序,分析为阳性->真阳性(TP) 阳性程序,分析为阴性->假阴性(FN) 阴性程序,分析为阳性->假阳性(FP) 负程序,分析为负->真负(TN) 如果系统从不接受积极的程序,则该系统是健全的 如果系统从不拒绝负面程序,则系统是完整的 所以从我上面写的判断: A complete system accepts FN and TN programs. A sound syste

首先是一些术语(借用自第14页):

正的程序是有错误的程序

负片程序是没有错误的程序


因此有四种类型的程序:

一个阳性程序,分析为阳性->真阳性(TP)

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

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

负程序,分析为负->真负(TN)


如果系统从不接受积极的程序,则该系统是健全的

如果系统从不拒绝负面程序,则系统是完整的


所以从我上面写的判断:
A complete system accepts FN and TN programs.
A sound system also accepts FN and TN programs.

一位同事告诉我,音响系统也接受FP节目。有人能证实这一点并解释他们为什么这么做吗?

这本书是这样解释的:

可靠性可防止误报,完整性可防止误报

因此,为了使系统可靠,它不需要防止误报,而只需要防止误报。为了防止误报,它必须是完整的

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

在现代语言中,类型系统是健全的(它们阻止了它们所声称的),但并不完整(它们是完整的) 拒绝他们不需要拒绝的程序)。稳健性很重要,因为它让语言使用者和语言使用者 实现者依赖于永远不会发生的X。完整性会很好,但希望在实践中很少出现 程序被不必要地拒绝,在这种情况下,程序员很容易修改 该程序可以进行类型检查

类型系统是不完整的,因为对于您可能希望静态检查的几乎任何内容,它都是不可能的 要实现一个静态检查器,在您的语言中给定任何程序(a)总是终止,(b)是健全的, (c)是完整的。既然我们不得不放弃一个,(c)似乎是最好的选择(程序员不喜欢) 可能不会终止的编译器)


比如说,一所房子的主人设置了报警系统来检测小偷。由于非法入侵以外的其他原因而不喜欢虚假警报的所有者会降低系统的敏感度,在这种情况下,当警报响起时,意味着“警报意味着有入侵者”,有无法发现熟练窃贼的危险。谨慎谨慎的所有者可以忍受虚假警报,但从不希望入侵,这可能会使系统更加敏感。在这种情况下,“没有警报意味着没有入侵”

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

本页()给出了关于可靠性和完整性的七种观点。另请参阅,其中指出,当声音算法从不给出错误的答案(从不返回错误的结果)时,完整的算法总能找到答案。这也可能有所帮助

中的内容显示了静态分析器示例的另一个透视图

在这本书中,
稳健性捕获了误报的发生
,换句话说,在完美的音响系统中,当它们实际上是警告时,没有错误报告:
稳健性越小,误报就越多

话虽如此,我认为作者的评论可能是一个打字错误,应该写为“稳妥防止误报……”。可能,在作者的领域中,稳健性意味着正常使用之外的东西,但我不确定

理解这些定义的一个好方法是,健全性会阻止 假阴性和完整性可防止假阳性

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

A system is sound, if it never accepts a positive program.
A system is complete, if it never rejects a negative program.
更好/正确的描述可以是

A system is sound, if it never accepts a false positive program.
A system is complete, if it never accepts a false negative program.