Algorithm 循环不变证明
我遇到了一个关于post条件的问题,并显示了这段代码的部分正确性Algorithm 循环不变证明,algorithm,loops,post-conditions,loop-invariant,Algorithm,Loops,Post Conditions,Loop Invariant,我遇到了一个关于post条件的问题,并显示了这段代码的部分正确性 { m = A ≥ 0 } x:=0; odd:=1; sum:=1; while sum<=m do x:=x+1; odd:=odd+2; sum:=sum+odd end while { Postcondition } 我知道循环的结果是m后面的完美正方形,但我不知道如何写 一如既往,我们非常感谢您的帮助。循环不变量是: odd = 2x+1 sum = (x+1)^2 证明: 归纳基础:琐碎
{ m = A ≥ 0 }
x:=0; odd:=1; sum:=1;
while sum<=m do
x:=x+1; odd:=odd+2; sum:=sum+odd
end while
{ Postcondition }
我知道循环的结果是m后面的完美正方形,但我不知道如何写
一如既往,我们非常感谢您的帮助。循环不变量是:
odd = 2x+1
sum = (x+1)^2
证明:
归纳基础:琐碎
诱导步骤:
如果你看到和的序列和完美平方的序列一样,你还需要什么?这就是你要找的职位条件吗?你只是需要帮助证明它还是什么吗?好吧,这就是我最初的post条件,
sum=(奇数-x)^2
。我去掉了它,因为我不确定它是否应该是循环不变量的一部分。我确实需要帮助来证明这一点,但我不想直接得到答案。我想我遇到的最大问题就是找到循环不变量。我更喜欢sum=(x+1)^2
,但它们是等价的。我假设,循环不变量是证明后条件为真的归纳步骤:换句话说,对于某些n
,假设sum[n]=(x[n]+1)^2,循环不变量是sum[n+1]=(x[n+1]+1)^2
。我必须完成这些步骤,并在初始化、保存和完成这三个步骤中证明循环不变量为真<代码>{m=A≥ 0 } ⊃代码>{m=A≥ 0∧ 1 = 1 ∧ 1=(1)^2}
x=0
{m=A≥ 0∧ 1=2x+1∧ 1=(x+1)2}
odd=1
{m=A≥ 0∧ 奇数=2x+1∧ 1=(x+1)2}
sum=1
{m=A≥ 0∧ 奇数=2x+1∧ sum=(x+1)2}
我认为这些是证明初始化的步骤。
odd = 2x+1
sum = (x+1)^2
new_x = x+1
new_odd = odd+2 = 2(x+1)+1 = 2*new_x+1
new_sum = sum+new_odd = (x+1)^2+2(x+1)+1 = new_x^2+2*new_x+1 = (new_x+1)^2