【问题标题】:Which hoare-triples is correct?哪个 hoare-triples 是正确的?
【发布时间】:2017-01-10 19:13:23
【问题描述】:

假设有一个方法接受两个参数 balance 和 price,它只执行以下操作:

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

我觉得有两种可能的方式来写这个三重奏:

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

( => 是暗示) 我想知道哪个是正确的?还是两者都正确?

【问题讨论】:

    标签: logic hoare-logic


    【解决方案1】:

    我本来打算发表评论,但我没有评论的声誉。
    这两个 hoare-triples 肯定不是等价的。如果 p0 >= balance,则第一个三元组的右侧评估为 true,而第二个三元组的右侧评估为 false。我在工作,现在不知道哪个是正确的 hoare-triple,但我相信比我更有资格的人会在我完成工作之前回答。

    如果我们让 P := p0 Q) v (-P => R) 和 (P ^ Q) v (-P ^ R),并创建如下真值表。

    +---+---+---+----------------------------+-- -------------------+
    | .P |问 | .R | (P => Q) v (-P => R) | (P ^ Q) v (-P ^ R) |
    +---+---+---+---------------+-------- ----------------+
    | .T | .T | .T | . . . . . . . .吨。 . . . . . . . | . . . . . . .T. . . . . . . |
    | .T | .T | .F | . . . . . . . .吨。 . . . . . . . | . . . . . . .T. . . . . . . |
    | .T | .F | .T | . . . . . . . .吨。 . . . . . . . | . . . . . . 。F 。 . . . . . . |
    | .T | .F | .F | . . . . . . . .吨。 . . . . . . . | . . . . . . 。F 。 . . . . . . |
    | .F | .T | .T | . . . . . . . .吨。 . . . . . . . | . . . . . . .T. . . . . . . |
    | .F | .T | .F | . . . . . . . .吨。 . . . . . . . | . . . . . . 。F 。 . . . . . . |
    | .F | .F | .T | . . . . . . . .吨。 . . . . . . . | . . . . . . .T. . . . . . . |
    | .F | .F | .F | . . . . . . . .吨。 . . . . . . . | . . . . . . 。F 。 . . . . . . |
    +---+---+---+---------------+-------- ----------------+

    这表明两个方程不等价。

    我猜右边的正确值是 (P => Q) ^ (-P => R),因为这两个语句都必须成立。我是新手,知识渊博的人可能会纠正我。

    【讨论】:

    • 你确定吗?我相信他们都评估为真,我想我错过了一些括号。
    • 令 P := p0 balance = b0 - p0) v (( p0 >= balance) => balance = b0) 变为 (P => Q) v (P => R)。此外,((p0 = balance) ^ (balance = b0)) 变为 (P ^ Q) v (P ^ R)。所以我们有 (P => Q) v (P => R) =?= (P ^ Q) v (P ^ R)。如果 P = False,则左侧为 True,右侧为 False。
    • 您将 P 用于 p0 = balance
    • 你是对的,我的错。第一个方程将变为 (P => Q) v (-P => R),第二个方程将变为 (P ^ Q) v (-P ^ R)
    • 我不这么认为。我刚刚划出了一个真值表,显示它们不等价,但我不熟悉如何在这里复制它,我想仔细检查我的工作。下班后我会在这里上传我的结果,当我可以查看如何在此处插入表格时。我认为第二个等式是你想要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-27
    • 2019-06-19
    • 2020-02-24
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-24
    相关资源
    最近更新 更多