证明算法的正确性

时间:2014-04-27 11:23:55

标签: proof formal-methods post-conditions proof-of-correctness hoare-logic

我想知道是否有人可以帮我回答这个问题。这是从以前的试卷开始,我可以知道今年考试的答案。

这个问题看起来很简单,我完全迷失了,究竟是什么要求? 以下算法是否找到最大值正确?

 {P: x≥0 ∧ y≥0 ∧ z≥0 } 
 if (x > y && x > z) 
 max = x; 
 else if (y > x && y > z) 
 max = y; 
 else 
 max = z; 
 {Q: max≥x ∧ max≥y ∧ max≥z ∧ ( max=x ∨ max=y ∨ max=z )} 

答案必须基于算法最弱前提条件的计算。

你如何验证这一点?这似乎很简单。

感谢。

1 个答案:

答案 0 :(得分:2)

  

这个问题看起来很简单,我完全迷失了,究竟是什么要求?

问题是要求您通过严格应用提前确定的一套规则(而不是阅读程序并说它显然有效)来正式证明程序的行为符合规定。

  

你如何验证?

该计划如下:

if (x > y && x > z) 
 max = x; 
else P1

P1if (y > x && y > z) max = y; else max = z;

的简写

所以该程序基本上是if-then-else。 Hoare逻辑为if-then-else结构提供了一个规则:

{B ∧ P} S {Q}   ,   {¬B ∧ P } T {Q}
----------------------------------
   {P} if B then S else T {Q}

为手头的程序制定一般的if-then-else规则:

{???}  max = x;  {Q}    ,    {???}  P1  {Q}
-------------------------------------------------------------------------------------
{true}  if (x > y && x > z) max = x; else P1  {Q: max≥x ∧ max≥y ∧ max≥z ∧ ( max=x ∨ max=y ∨ max=z)}

您可以填写???占位符吗?