给定一个循环不变量,维基百科列出,一个很好的方法来产生一个循环最弱的前提条件 (来自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相同?我根本无法解析上面的内容。
编辑:改述以避免引用请求。
我的问题是:循环不变量与计算最弱前提条件之间的直接连接是什么,如果有的话。似乎在实践中做了很多事情,将循环的最弱前提条件放在适合验证的前提条件下。上面的维基百科建议,给定一个循环不变量,人们确实可以计算出鼻子上最弱的前提条件,但我无法理解这种情况。
答案 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检查终止,看看相同解释的实际版本是否对您更有意义。