我已经搜索了一段时间,但找不到关于“谓词检查”的简明定义。什么时候可以应用谓词检查?它与霍尔的三重奏相比如何?我认为如果我们正确地将Hoare的三元组应用于每行代码,我们可以保证软件的正确性。 (如果我错了,请纠正我。)谓词检查可以提供相同的属性吗?如果问题本身不正确,我道歉。我真的不知道谓词检查是做什么的。
答案 0 :(得分:2)
Predicate 是一个逻辑语句或函数,等同于true或false结果。
程序语句和声明语言中谓词的最简单的例子是保护条款和断言,例如。
> if (x != null) then ...
> assert x != null
Hoare的前提条件和后置条件是谓词的例子。我认为在Hoare中没有任何关于封装语句的粒度的明确内容,前提是它具有进入后置条件的单一退出路径。它可以是单一陈述,一种功能或整个过程。
不变量是谓词的特例,其中后置条件=前置条件。
也许最纯粹的例子是Prolog,其中每个语句都是谓词。另一个例子是在Eiffel中使用的按合同设计,LISP中的空列表也是谓词。
我不愿意同意“保证软件的正确性”,并且没有正确性符合谓词的资格。
<强>更新强>