dafny 不支持设置操作

Set operations unsupported in dafny

我是 dafny 的新手,在使用像这样的集合时遇到了一个问题: var myset : set<(int, int)> := {(1, 10), (2, 20), (3, 20)};

  1. 如何将第一对放入变量中?然后如何访问这对中的每个值?
  2. 如何将一对添加到我的集合中?

数组以这种方式工作:myarray[i].0myarray[i].1

集合是不可变的、无序的集合。

  1. 集合中没有“第一个”元素这样的东西。您可以像这样选择一个任意元素:

    var x :| x in myset;  // get an arbitrary element
    

    x 肯定是集合中的 一个 元素,但你不知道是哪一个。例如,Dafny 验证了以下关于 x 的断言:

    assert x == (1,10) || x == (2, 20) || x == (3, 20);
    
  2. 要添加元素,可以使用+(和变量赋值):

    myset := myset + {(4, 0)}; // add an element