Я новичок в Фрам-с, и я хотел бы понять, что проблема с этим простым примером:Невозможно доказать, присвойте положение - FRAMA-C
/*@ requires \valid(array+(0..length-1))
@ ensures \forall integer k; 0 <= k < length ==> array[k] == 0;
@ assigns array[0..length-1];
*/
void fill(int array[], int length){
/*@ loop invariant 0 <= i <= length;
@ loop invariant \forall integer k; 0 <= k < i ==> array[k] == 0;
@ loop assigns i, array[0..i-1];
@ loop variant length - i;
*/
for(int i = 0; i < length; i++){
array[i] = 0;
}
}
В этом примере Frama-с (WP + Value) не докажет предложение присваивания в контракте функции, и я не могу понять, почему. Любая помощь будет оценена =)
Почему? Разве это не нормально? Я просто хочу заполнить массив int (объявлен статически) нулями ... Не int * array [] массив int указателей? Во всяком случае, это не делает трюк:/ – roo
Я не понимаю, что вы имеете в виду. Даже с этой подписью fill (int * array, int length) проблема все еще здесь ... – roo
@EliasVanOotegem В C массивы передаются по ссылке. Функция прекрасна, и характеристики в порядке. Плагин Value не доказывает «присваивает», потому что он не стремится сделать это (он использует только «присваивает» клаузулы в качестве источника информации и только для функций библиотеки без исходного кода). Я думал, что WP это докажет. Roo, какие автоматические указатели вы установили? –