我試圖在此示例中證明返回值將爲0(如果8不在數組中)或1(如果在數組中爲8 )。瞭解如何正確使用post-condition和loop-invariant與Frama-c
int fi8(int *array, int size) {
int fi8 = 0;
int i = 0;
for(i = 0; i < length; ++i)
{
if(array[i] == 8)
fi8 = 1;
}
return fi8;
}
我開了前置和後置條件:
/*@ requires 0 <= size <= 100;
@ requires \valid(array+(0..size-1));
@ assigns \nothing;
@ ensures (\forall integer i; 0<= i < size && array[i] != 8) ==> (\result == 0);
@ ensures (\exists integer i; (0<= i < size && array[i] == 8)) && (\result == 1);
@*/
和循環不變,因爲郵資-C是基於霍爾邏輯:
/*@ loop invariant 0 <= i <= length;
@ loop invariant fi8 == 0 || fi8 == 1;
@ loop invariant (\forall integer i; 0<= i < size && array[i] != 8)
==> (fi8 == 0);
@ loop invariant (\exists integer i; (0<= i < size && array[i] == 8))
&& (fi8 == 1);
@ loop assigns i, fi8;
@*/
我相當肯定,我錯過了一些線路上,我試圖使用所有 和存在。 我花了數小時試圖理解,如何正確檢查,如果任何值分配給數組或不,但我覺得我卡在這裏。 我真的很感謝你的幫助:)
Frama-C不是基於Hoare邏輯,儘管一些Frama-C插件可能是。 – 2014-11-24 04:37:53