【问题标题】:Dafny multisetsDafny 多组
【发布时间】:2021-07-03 01:39:47
【问题描述】:

在参考手册 (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])));

它会验证,我会说它与确保中的相同,但似乎不是。有什么帮助吗?

【问题讨论】:

    标签: theorem-proving dafny multiset


    【解决方案1】:

    multiset({1,1}) 表示“构造 set {1,1},然后将其转换为多重集”。由于集合{1,1} 和集合{1} 相同,因此您的断言通过。

    我想你想要multiset{1,1}

    【讨论】:

    • “构造集合 {1,1},然后将其转换为多集合”或多或少的意思是“从 {1,1} 构造集合,然后将其转换为多集合” ?
    • 正确。关键是multiset{...} 是它自己的语法结构,它与集合的{...} 完全分开。
    猜你喜欢
    • 2021-07-04
    • 2023-03-23
    • 1970-01-01
    • 2018-11-03
    • 2017-10-21
    • 2021-12-22
    • 2016-03-07
    • 1970-01-01
    • 2020-12-27
    相关资源
    最近更新 更多