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