证明无等待算法正确性的一般方法

时间:2014-04-18 14:01:57

标签: algorithm concurrency

我使用通用构造为无等待二叉搜索树设计算法。我有每个方法的线性化点。但我不确定如何正式证明该算法的正确性。

在搜索类似的论文时,我发现他们已经证明该算法是等待的,并且只生成可线性化的执行。这种情况是必要还是足够?

是否还有其他正式方法可以证明无等待算法的正确性?

1 个答案:

答案 0 :(得分:0)

要正式证明某事,您需要以下内容:

  • 您要证明的事物的确切定义。在您的情况下,这可能是某种始终正确的谓词。我举个例子:
  

对于大小为N的BlockingQueue,队列中元素的数量应始终为[0,N]。

     

如果BlockingQueue为空,则添加项目的次数等于从中删除项目的次数。

好的,我们有定义或/和确切的描述。现在,有几种方法可以证明这一点:

  • Proof by contradiction方法。考虑陈述是不正确的,最终得出一些不可能的结论。例如,我们想要证明Integer numbers can be negative点。让我说明一下:
  

所有整数都是正数。

这导致我们-1是一个假数字的正数,因此该语句是错误的,并且证明了原始语句。

  • 通过使用Mathematical induction(对于Сountable集),或使用一些更复杂的逻辑语句和方法,通过检查所有可能的情况(通过检查所有可能的情况(对于有限集)来证明该语句是正确的。更具体的例子取决于我们要证明的定理。

我还要根据我的经验补充一点,我上面写的Proof by contradiction方法在很多情况下经常使用并且很合适,所以你可能应该首先考虑它。