循环不变量和最弱前提条件之间的关系是什么

时间:2014-10-11 19:26:58

标签: formal-methods formal-verification loop-invariant formal-semantics hoare-logic

给定一个循环不变量,维基百科列出,一个很好的方法来产生一个循环最弱的前提条件 (来自http://en.wikipedia.org/wiki/Predicate_transformer_semantics):

wp(while E inv I do S, R) = 
    I \wedge
    \forall y. ((E \wedge I) \implies wp(S,I \wedge x < y))[x <- y] \wedge
    \forall y. ((\neg E \wedge I) \implies R)[x <- y]
where y is a tuple of fresh variables.

M [x < - N]用M替换M中x的所有出现。

现在,我的问题是变量y。 \ forall y,在表达式中绑定y,所以&#34; y是新变量的元组&#34;我没有解析。 y是否绑定在\ forall中,与&#34; [x&lt; -y]&#34;中的y相同?我根本无法解析上面的内容。

编辑:改述以避免引用请求。

我的问题是:循环不变量与计算最弱前提条件之间的直接连接是什么,如果有的话。似乎在实践中做了很多事情,将循环的最弱前提条件放在适合验证的前提条件下。上面的维基百科建议,给定一个循环不变量,人们确实可以计算出鼻子上最弱的前提条件,但我无法理解这种情况。

1 个答案:

答案 0 :(得分:1)

您引用的规则中的语法“x&lt; - y”表示同时替换我们可以假设命名为x 1 ,x 2 ,... x n 分别由其他变量y 1 ,y 2 ,... y n 当你指出,在公式中紧挨着一个\ forall。

在实践中应用规则的方法是选择谓词R中出现的一组变量。这些变量的数量和名称由选择应用规则的人选择,但必须能够在所选元素的元组之间定义有根据的关系<,以便{{1}最终将是可证明的。

这就是维基百科文章所说的“while-loop的最弱前提条件通常由称为循环不变量的谓词\forall y. ((E \wedge I) \implies wp(S,I \wedge x < y))[x <- y]参数化,并且在空间状态上表示为{{1并且调用了循环变量。“它不仅仅是I必须提前选择并且必须装饰程序,还有在循环体中修改的程序的许多变量的选择<并且发生在条件I中,并且在这些变量的值元组之间存在有根据的命令S,最终保证条件E为false

使用可以尝试的实际验证系统更容易理解。请阅读this tutorial部分 2.3检查终止,看看相同解释的实际版本是否对您更有意义。