我正在尝试在 Dafny 中验证我的代码,但遇到了一个问题:我有一个方法正在迭代一个序列并对其进行更改。该方法根据序列中的元素改变序列。我想添加这样的后置条件:“如果序列中的元素是 X,那么应该发生一些事情”。问题是该方法更改了集合(添加元素等),我想检查原始序列的条件。在 Dafny 中是否有一种优雅的方式来做到这一点?(我现在能想到的唯一方法是保持序列原始条件的全局变量,但我正在寻找正确的方法)。
代码示例:
method changeSeq(p: class1, s: seq<class1>)
ensures |s| == 10 ==> p in s
{
if (|s| == 10){
s := s + [p];
}
}
在代码中,我希望 post 条件检查原始 s stat,而不是我们更改后的 stat。