logic - 是 {true} x := y { x = y } a valid Hoare triple?

标签 logic hoare-logic

我不确定

{ true } x := y { x = y }

是有效的 Hoare triple .

我不确定是否允许引用一个变量(在本例中为 y ),而无需先在三重程序主体或前提条件中明确定义它。
{ y=1 } x := y { x = y } //valid

{true} y := 1; x := y { x = y } //valid

如何?

最佳答案

I am not sure that

{ true } x := y { x = y }

is a valid Hoare triple.



三元组应阅读如下:

“无论开始状态如何,执行后 x:=y x 等于 y。”

它确实成立。为什么它成立的正式论点是
  • x := y的最弱前提给定后置条件 { x = y }{ y = y } , 和
  • { true }暗示 { y = y } .

  • 然而,我完全了解您为何感到不安 关于这个三倍,你有充分的理由担心!

    三元组的表述很糟糕,因为前置和后置条件没有提供有用的规范。为什么?因为(如您所见)x := 0; y := 0也满足规范,因为 x = y执行后保留。

    显然,x := 0; y := 0不是一个非常有用的实现,它仍然满足规范的原因是(根据我的说法)由于规范错误。

    如何解决此问题:

    表达规范的“正确”方式是通过使用一些程序无法访问的元变量来确保规范是自包含的(在这种情况下是 x₀y₀):
    { x=x₀ ∧ y=y₀ } x := y { x=y₀ ∧ y=y₀ }
    

    这里x := 0; y := 0不再满足后置条件。

    关于logic - 是 {true} x := y { x = y } a valid Hoare triple?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7628925/

    相关文章:

    z3 - Z3中一个if-else和while循环的验证条件

    quicksort - 快速排序,霍尔分区,使用随机枢轴

    python - 在python中对数组列表进行分类

    javascript - 随机数游戏,最小值和最大值的问题

    python - 当多个值等于枢轴时,Hoare 分区不起作用

    algorithm - 我如何使用霍尔逻辑证明这种二进制搜索算法是正确的?

    algorithm - 霍尔分区的正确性

    java - 不正确的逻辑

    javascript - 分组交替行颜色与变化

    logic - 伪代码和集成方法的问题