Я видел пример программу, которая устанавливает все значения в массиве 0:Loop инвариант простого, а петли
int a[n]; int i = 0;
while(i < n) {
a[i] = 0;
i++;
}
Он сказал, что часть инварианта цикла была 0<=i<n
. Однако после завершения цикла цикл i будет равен n. Правильно ли я говорю, что это не является частью инварианта цикла? Если да, то в чем его следует заменить? Полный инвариант был For All j (0<= j < i --> a[i] = 0) & 0 <= i < n)
Полный цикл-инвариант обычно является ложным после цикла. Иногда достижение этого состояния является точкой цикла. Иногда, как и здесь, часть цикла-инварианта сохраняется и сразу после цикла, где это точка. –