哪个三重奏是正确的?

时间:2017-01-10 19:13:23

标签: logic hoare-logic

让我们说有一种方法需要两个参数平衡和价格,只有以下几点:

if(price < balance) {
    balance = balance - price;
}

我觉得有两种方法可以用hoare-triple写这个:

(| price=p0 ^ balance = b0 |) buy (| ((p0 < balance) => balance = b0 - p0) v ((p0 >= balance) => balance = b0) |)

(| price=p0 ^ balance = b0 |) buy (| ((p0 < balance) ^ (balance = b0-p0)) v ((p0 >= balance) ^ (balance = b0))

(=&gt;含义) 我想知道哪一个是正确的?或者都是正确的?

1 个答案:

答案 0 :(得分:1)

我打算将此作为评论,但我没有评论的声誉。
这两个三重奏组肯定不相同。如果p0> = balance,则第一个三元组的右侧评估为true,而第二个三元组的右侧评估为false。我现在正在工作,现在无法解决哪个是正确的笨蛋,但我确信在我工作完成之前,比我更有资格的人会回答。

如果我们让P:= p0&lt;平衡,Q:= balance = b0 - p0,R:= balance = b0,我们可以用(P =&gt; Q)v(-P =&gt; R)和(P ^ Q)表示方程的右边)v(-P ^ R),并创建以下真值表。

+ --- + + --- --- + ---------------------------- + ----- ------------------- +
| .P |问| .R | (P =&gt; Q)v(-P =&gt; R)| (P ^ Q)v(-P ^ R)|
+ - + - + - + ---------------------------- + -------- ---------------- +
| .T | .T | .T | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 .T。 。 。 。 。 。 。 |
| .T | .T | .F | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 .T。 。 。 。 。 。 。 |
| .T | .F | .T | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 。F 。 。 。 。 。 。 。 |
| .T | .F | .F | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 。F 。 。 。 。 。 。 。 |
| .F | .T | .T | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 .T。 。 。 。 。 。 。 |
| .F | .T | .F | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 。F 。 。 。 。 。 。 。 |
| .F | .F | .T | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 .T。 。 。 。 。 。 。 |
| .F | .F | .F | 。 。 。 。 。 。 。 。 T. 。 。 。 。 。 。 。 | 。 。 。 。 。 。 。F 。 。 。 。 。 。 。 |
+ - + - + - + ---------------------------- + -------- ---------------- +

这表明这两个方程不相等。

我猜想右侧的正确值是(P =&gt; Q)^(-P =&gt; R),因为两个语句都必须保持。我是一个讽刺逻辑的新手,而一个知识渊博的人可能会纠正我。