如何在Dafny中迭代有限集对象的元素?

时间:2018-02-12 04:19:32

标签: iterator dafny

在Dafny中迭代有限集对象的元素的最佳方法是什么?工作代码的一个例子令人愉快。

1 个答案:

答案 0 :(得分:1)

这个答案解释了如何使用while循环,而不是通过定义迭代器。诀窍是使用“assign that that”操作符, :|,获取一个值y使得y在集合中,然后在y集合中重复该集合,继续直到没有更多元素。减少条款在这里是必要的。有了它,Dafny证明了while循环的终止,但没有它,不是。

method Main()
{
    var x: set<int> := {1, 2, 3};
    var c := x;
    while ( c != {} )
        decreases c;
    {
        var y :| y in c;
        print y, ", ";
        c := c - { y };
    }
}