Пытаюсь написать программу на Дафни, вот часть программы:
method GenerateAllIndexSubsets<T>(q: seq<T>) returns (res: set<set<nat>>)
ensures res == AllIndexSubsets(q)
{
if |q| == 0
{
assert |q| == 0;// if's guard
// ==>
assert {} == AllIndexSubsets<nat>([]);
assert q == [];
assert {} == AllIndexSubsets(q);
res := {};
assert res == AllIndexSubsets(q); // postcondition
}
else
{
assert |q| != 0; // !(if's guard)
var res0 : set<set<nat>> := GenerateAllIndexSubsets<T>(q[1..]);
assert res0 == AllIndexSubsets(q[1..]);
res := res0;
assert res == AllIndexSubsets(q[1..]); //GenerateAllIndexSubsets postcondition with q[1..]
var index : nat := q[0];
var res1: set<set<nat>> := (set x | x in res0 :: x + {index});
assert res1 == AllIndexSubsets(q) - AllIndexSubsets(q[1..]);
assert res0 == AllIndexSubsets(q[1..]);
assert res1 == AllIndexSubsets(q) - res0;
// ==>
assert res0 + res1 == AllIndexSubsets(q);
res := res + res1;
assert res == AllIndexSubsets(q); // postcondition
}
assert res == AllIndexSubsets(q); // postcondition
}
в строке var index : nat := q[0]
я получаю следующую проблему:
тип не согласуется с типом элемента seq (получил int)
Почему я получаю это и как я могу исправить это сейчас и не получить это снова в будущем?