【发布时间】:2020-07-06 05:27:37
【问题描述】:
我试图为此代码编写循环不变量和后置条件:
sum = 0;
for (i = 0; i < 10; ++i)
++sum;
sum = 10 是这里明显的后置条件。但是有朋友告诉我i = sum也是循环不变量,sum = 12也是后置条件。我检查了以下内容:
- 循环不变量最初是正确的:
i = sum也是如此,因为两者最初都是 0 - 循环不变量被保留:假设
i < 10和i = sum然后经过一次迭代它仍然是真的++i = ++sum - 循环不变量意味着后置条件:假设
i >= 10和i = sum然后sum = 12也为真
但显然 sum 在这里不等于 12。那么我的推理有什么问题呢?
【问题讨论】:
-
for 循环的工作方式确保
i = 10不仅仅是i >= 10在循环之后。 -
@henry 我认为 Hoare 逻辑声明“假设循环条件不再为真并且循环不变量为真,那么后置条件为真。”在这种情况下,“循环条件不再为真”意味着 !(i = 10?
标签: algorithm invariants hoare-logic