【问题标题】:Proving correctness of algorithm证明算法的正确性
【发布时间】:2014-04-27 11:23:55
【问题描述】:

我想知道是否有人可以帮助我回答这个问题。它来自以前的试卷,我可以知道为今年考试准备的答案。

这个问题看起来很简单,以至于我完全迷失了,它到底在问什么? 以下算法找到最大值是否正确?

 {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 )} 

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

您如何验证这一点?看起来很简单。

谢谢。

【问题讨论】:

  • 确实,验证程序是霍尔逻辑的直接应用(en.wikipedia.org/wiki/Hoare_logic)。你试过什么?你读过课程文件吗?
  • 我做了..我不知道如何开始..

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


【解决方案1】:

这个问题看起来很简单,以至于我完全迷失了,它到底在问什么?

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

你如何验证这一点?

程序如下:

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)}

你能完成??? 占位符吗?

【讨论】:

  • 应该是:{x > y && x > z} max = x; {Q} , {y > x && y > z,max = z} P1 {Q} 我如何计算最弱的前提条件?感谢您抽出宝贵时间 Pascal Cuoq !我真的很喜欢它......
  • @user2988649 是的,您发现自己必须在左侧证明{x > y && x > z} max = x; {Q}。在右侧,您将¬ 应用到x > y && x > z 时出错。结果不是你写的:¬ (x > y && x > z) 等价于x <= y || x <= z。该程序和所提供的后置条件的最弱前置条件是true。我已经填写了,以便您更轻松。遵循最弱前提条件,您将在其余证明中填写的内容中最后填写该部分。
  • @user2988649 此时我们仍在尝试将 if-then-else 规则应用于第一个 if。通用 if-then-else 规则是 {¬B ∧ P } T {Q}
猜你喜欢
  • 2015-08-27
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2013-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多