Вот пример, который принимает целое число lim
и возвращает последовательность всех целых чисел строго меньше lim
, которые являются четными.Dafny собирает evens ниже N
Только обратное направление ... <==> ...
во втором инварианте не проверяется. Я пробовал играть с этим некоторое время, и я не смог понять это.
Любая помощь очень ценится!
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;
}
}