需要帮助了解Owicki-Gries方法

时间:2014-09-25 05:15:51

标签: theorem-proving formal-verification

我(错误地)选择了关于验证并发程序的课程,到目前为止我们已经介绍了这种名为“Owicki-Gries方法”的方法。显然,通过将断言与每个语句相关联,可以证明关于程序的各种结果,并且显示这些断言是归纳的并且不会相互干扰。我们的一项任务涉及Lamports的快速互斥算法,detailed in this paper

在论文中,给出了一种Owicki-Gries风格的互斥证明。它看起来完全反直觉。我很难理解的是如何首先提出这些断言?你什么时候知道这些断言既不是太强大(如此强大以至于它打破了干扰自由),也不是太弱(例如一些微不足道的东西,比如每个陈述的重言式)?

干杯

1 个答案:

答案 0 :(得分:1)

首先,并提供对 Owicki-Gries 方法的理解,我强烈建议您查看 this 教科书中关于 Owicki-Gries 的两章。

(在 2021 年年中还可以找到草稿格式 here 的完整教科书,或者您可以通过电子邮件 Professor Morgan 索取副本)

当你写一个断言然后试图证明局部正确性时,引用教科书“每个断言......都是 紧接之前的片段,以及紧接其后的(代码行)的先决条件。

要回答您的问题,您会询问如何确定断言的强度。由于在每一行代码之前和之后都需要一个断言,所以断言的范围从极弱到中等弱。因此,我建议最初尝试一个适度弱的断言。

当您要证明局部正确性、全局不变量和全局正确性时,如果您意识到断言太强,您可以返回代码并削弱它们。相反,如果断言太弱,您可以尝试将它们调整得更强一些。

当它们支持您的程序运行,同时满足 Owicki-Gries 的条件并满足安全性和活性的特性时,您就知道它们是正确的力量。