【发布时间】:2021-03-01 11:21:05
【问题描述】:
我正试图在 dafny 中弄清楚一些事情。
给定 2 个数组 a 和 b,我的断言、不变量、后置条件等形式为:
multiset(a[..]) == multiset(b[..]);
失败但
multiset(a[..a.Length]) == multiset(b[..b.Length])
成功了。
我对此感到非常困惑,因为我认为 a[..] 和 a[..a.Length] 将是完全相同的东西。不过,我发现了一些有趣的事情。如果我在方法的末尾添加:
assert a[..a.Length] == a[..];
assert b[..b.Length] == b[..];
然后我可以让涉及我的第一个示例的不变量、后置条件、断言起作用。
这表明 a[..] 和 a[..a.Length] 实际上是不同的。
有人能解释一下为什么会这样吗?这里发生了什么?
【问题讨论】: