我编写了自己的小功能(为了方便而使用php),希望有人可以通过感应来帮助构建证据,这样我就能得到一个非常基本的东西。
function add_numbers($max) {
//assume max >= 2
$index=1;
$array=array(0);
while ($index != $max) {
//invariant: ∀ k:1 .. index-1, array[k]=array[k-1]+1
$array[$index] = $array[$index-1]+1;
$index += 1;
}
}
结果是每个索引的值与索引本身相同,但只是因为[0]被初始化为0。
我相信目标是(或者应该)证明不变量(可能本身就是可疑的,但希望得到重点)适用于k + 1.
由于
编辑:示例:http://homepages.ius.edu/rwisman/C455/html/notes/Chapter2/LoopInvariantProof.htm
答案 0 :(得分:1)
这样的事,也许,虽然这有点迂腐。
不变量:当index = n时,对于n> = 1(在它检查条件的循环顶部),array [i] = i for 0< = i< Ñ
证明:证据是通过归纳证明的。在基本情况下n = 1,循环第一次检查条件,主体没有执行,并且我们有一个外部保证,即代码中较早的数组[0] = 0。假设不变量适用于所有n到k。对于k + 1,我们分配数组[k] =数组[k-1] + 1.从归纳假设,数组[k-1] = k-1,所以赋值数组[k]的值是(k-1) )+1 = k。因此,不变量适用于下一个,并通过归纳每个n的值(在循环的顶部)。
编辑:
function add_numbers($max) {
//assume max >= 2
$index=1;
$array=array(63);
while ($index != $max) {
//invariant: ∀ k:1 .. index-1, array[k]=array[k-1]+1
$array[$index] = $array[$index-1]+1;
$index += 1;
}
}
不变量:当index = n时,对于n> = 1(在它检查条件的循环顶部),array [i] = i + 63 for 0< = i< Ñ
证明:证据是通过归纳证明的。在基本情况下,n = 1,循环首次检查条件,正文尚未执行,并且我们有一个外部保证,即代码中较早的数组[0] = 63。假设不变量适用于所有n到k。对于k + 1,我们分配数组[k] =数组[k-1] + 1.从归纳假设,数组[k-1] =(k-1)+ 63 = k + 62,所以赋值数组[k]是(k + 62)+ 1 = k + 63。因此,不变量适用于下一个,并通过归纳每个n的值(在循环的顶部)。