我是 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-c (WP + Value) 不会证明函数合同中的分配子句,我不明白为什么。任何帮助将不胜感激 =)