Validation 如何为这段代码找到最强的循环不变量?

Validation 如何为这段代码找到最强的循环不变量?,validation,formal-verification,loop-invariant,proof-of-correctness,Validation,Formal Verification,Loop Invariant,Proof Of Correctness,我试图为下面的while循环找到一个循环不变量,但遇到了一些麻烦 在确定循环不变式之后,我将整理一个证明表,并显示所有中间断言 ASSERT(k >= 0) {i = 1; sum = 1; while (i <= k) { sum = sum + 2*i + 1; i = i+1; } //end-while } ASSERT( sum == (k+1)*(k+1) ) 断言(k>=0) {i=1; 总和=1; 而(iINV(1)={sum==(n+1

我试图为下面的while循环找到一个循环不变量,但遇到了一些麻烦

在确定循环不变式之后,我将整理一个证明表,并显示所有中间断言

ASSERT(k >= 0)
{i = 1;
 sum = 1;
 while (i <= k) { 
     sum = sum + 2*i + 1;
     i = i+1;
 } //end-while
}
ASSERT( sum == (k+1)*(k+1) )
断言(k>=0)
{i=1;
总和=1;
而(i
INV(1)={sum==(n+1)*(n+1)}

INV(2)={0注意,当它存在循环时,
i
的值是
k+1
,也就是说,一个好的不变量似乎是:

INV(1) = {1 <= i <= k+1}

INV(2) = {sum == i*i}
INV(1)={1
INV(1) = {1 <= i <= k+1}

INV(2) = {sum == i*i}