这是一个例子,它接受一个整数lim
并返回一个严格小于lim
偶数的所有整数的序列。
只有第二个不变量中的向后方向... <==> ...
不验证。我已经尝试过一段时间了,但我无法弄清楚。
任何帮助深表感谢!
method evens(lim : int) returns (ret : seq<int>)
requires 0 < lim
{
ret := [];
var i := 0;
while (i < lim)
invariant 0 <= i <= lim
invariant forall idx :: 0 <= idx < i ==> (idx % 2 == 0 <==> idx in ret)
{
if (i % 2 == 0) {
ret := [i] + ret;
}
i := i + 1;
}
}