我在看Hoare Logic,我在理解寻找循环不变量的方法时遇到了问题。
有人可以解释用于计算循环不变量的方法吗?
循环不变量应该包含什么才能成为“有用的”?
我只是处理简单的例子,找到不变量,并在例子中证明部分和完全的纠正:
{ i ≥ 0 } while i > 0 do i := i−1 { i = 0 }
答案 0 :(得分:4)
如果我们谈论Hoare的逻辑来证明(部分)程序的正确性,那么你使用前置条件和后置条件,分解程序并使用Hoare逻辑推理系统的规则来创建和证明归纳公式。
在您的示例中,您希望使用规则
分解程序{p} while b do S {p^not(b)} <=> {p^b} S {p}
在你的情况下
因此,在下一步中我们推断{i ≥ 0 ^ i > 0} i := i−1 {i ≥ 0}
。这可以进一步推断并且很容易证明。
我希望这会有所帮助。
答案 1 :(得分:3)
我不确定这是否会回答你的问题,但以防万一:
答案 2 :(得分:2)
有用(为你的推理)是不变量的要点。所以,看看你想要证明的后置条件,并尝试组成一个不变的,它将帮助你逐步到达后置条件,并且可以从循环代码中得出。