达夫尼多重集
Dafny multisets
在参考手册(http://www.cse.unsw.edu.au/~se2011/DafnyDocumentation/Dafny%20-%20ValueTypes.pdf)中,我们可以发现:如果两个多重集的每个元素的数量完全相同,则它们是相等的。但是,如果我断言没有违规:
assert multiset({1,1}) == multiset{1};
所以我理解错了。
那么,举个例子,证明一下:
lemma seqSplit(s:seq<int>, c:int, p:int, f:int)
requires 0<=c<=p<=f+1<=|s|
ensures multiset(s[c..f+1]) == multiset(s[c..p])+multiset(s[p..f+1])
什么是必要的?我开始于:
assert forall i :: c<=i<=f ==>
(s[i] in multiset(s[c..f+1]) <==> (s[i] in multiset(s[c..p]) || s[i] in multiset(s[p..f+1])));
它验证了,我会说它与确保中的相同,但似乎不是。有帮助吗?
multiset({1,1})
表示“构建 set {1,1}
,然后将其转换为多重集”。由于集合 {1,1}
和集合 {1}
相同,因此您的断言通过。
我想你想要 multiset{1,1}
.
在参考手册(http://www.cse.unsw.edu.au/~se2011/DafnyDocumentation/Dafny%20-%20ValueTypes.pdf)中,我们可以发现:如果两个多重集的每个元素的数量完全相同,则它们是相等的。但是,如果我断言没有违规:
assert multiset({1,1}) == multiset{1};
所以我理解错了。
那么,举个例子,证明一下:
lemma seqSplit(s:seq<int>, c:int, p:int, f:int)
requires 0<=c<=p<=f+1<=|s|
ensures multiset(s[c..f+1]) == multiset(s[c..p])+multiset(s[p..f+1])
什么是必要的?我开始于:
assert forall i :: c<=i<=f ==>
(s[i] in multiset(s[c..f+1]) <==> (s[i] in multiset(s[c..p]) || s[i] in multiset(s[p..f+1])));
它验证了,我会说它与确保中的相同,但似乎不是。有帮助吗?
multiset({1,1})
表示“构建 set {1,1}
,然后将其转换为多重集”。由于集合 {1,1}
和集合 {1}
相同,因此您的断言通过。
我想你想要 multiset{1,1}
.