我试图了解Wikipedia提出的Hoare逻辑,Wikipedia的Hoare逻辑显然,如果我正确理解,hoare triple $$ {p } 〜c〜 {q } $

如果p在c之前,则Q立即在C之后保持,只要C终止。 (一个)

但是,分配的公理架构似乎以不同的方式解释:

$$ frac {} { {p [x/e] } ~~ x:= e ~~ {p }} $$

维基百科说:

分配公理意味着$ {p [x/e] } $的真实性等于$ {p } $的后分配真相。因此,$ {p [x/e] } $ true在分配之前,由分配axiom,然后$ {p } $在此之后是正确的。相反,在分配语句之前为$ {p [x/e] } $ false,$ {p } $因此必须为false。

我认为hoare三重仅肯定如果x:= e之前的p [x/e],则p(x)在x:= e之后保持p(x)。根据其定义,它并不确认如果p(x)在x:= e之后保持p [x/e],则p [x/e]在x:= e之前保持。

我的天真问题是,在分配分配之前,$ {p [x/e] } $如何等于分配后的$ {p } $?这与我帖子开始时(a)点相矛盾吗?

有帮助吗?

解决方案

请注意,维基百科在说的是

分配公理意味着$ {p [x/e] } $的真相相当于 后分配真相 $ {p } $的$。

换句话说,($ p $在执行$ x:= e $之后保留),如果($ p [x/e] $在执行之前保留)。这等同于您提供的定义$ a $,这通常是Hoare Triple的更直观的定义。

其他提示

似乎Wikipedia文本的措辞在某种程度上是薄弱的:

分配公理意味着{p [x/e]}的真相是 相等的 {p}的后期真相。

分配公理并不意味着这。这仅表示{p [x/e]}的真相 暗示 {p}的后期真相。这并不意味着“等价”。

但是,等价也是一个有效的事实。只是hoare公理分配没有说。

明确而严格处理类似Hoare的证明系统的好来源是Apt和Eldog的 验证顺序和并发程序.

这意味着更多类似

如果p在c之前为真,则Q在此之后将是真实的。

有时间考虑,因为通常C会改变环境。

想想这个示例:$ c =(x:= 42)$和$ p =(x> 10)$。然后,您的规则实例是有道理的。

编辑:时间注意事项很重要。在这里,$ p $其中“ $ x = e $”(即在后面)等于$ p [x/e] $(之前)。请注意,“ $ x = e $”只是为了指定“后”:这不是真正的平等,因为$ x $可以出现在$ e $中。

例如

$$ {0 +42> 10 } ~~ x:= 0 ~~ {x +42> 10 } $$ $ $ $ {x +42> 10> 10 } ~~ x:= x +42〜 〜 {x> 10 } $$

可以帮助您证明

$$ { mbox {true} } ~~ x:= 0〜; 〜x:= x + 42 ~~ {x> 10 } $$

附带说明,我个人发现符号$ p [x/e] $非常令人困惑。

许可以下: CC-BY-SA归因
不隶属于 cs.stackexchange
scroll top