Dafny上下文修改子句错误

时间:2017-04-24 15:20:40

标签: dafny

我很难摆脱我的Dafny程序中的最后一个错误。有人能指出我正确的方向吗? 以下是代码:http://rise4fun.com/Dafny/2FPo

我收到此错误:赋值可能更新数组元素而不是封闭上下文的modifies子句

我尝试在merge方法中添加修改矩形(尽管我很确定已经包含在修改它中)但是这只会在merge方法调用中创建类似的错误。

我真的迷失了这个。谢谢你的帮助

1 个答案:

答案 0 :(得分:6)

问题是"修改了这个"允许修改字段,而不是修改那些字段指向的东西。换句话说,如果方法正在进行,那将是合适的:

this.rectangles := new_rectangle_array;

但不是如果它在做:

this.rectangles[3] := new_rect;

所以,在你所拥有的地方"修改这个"你应该改为使用"修改矩形"。

由于类似的原因,测试需要使用"修改c.rectangles",而不是"修改c"。

最后,为了说服Dafny调用Test,你需要给Couverture的构造函数一个约束矩形字段的后置条件。否则,验证者无法确定可以调用Test:只要验证者可以知道,couv可能包含一些主要不允许修改的随机数组。

有关完整代码,请参阅http://rise4fun.com/Dafny/Skrg