Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 循环不变证明_Algorithm_Loops_Post Conditions_Loop Invariant - Fatal编程技术网

Algorithm 循环不变证明

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 证明: 归纳基础:琐碎

我遇到了一个关于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
证明:

归纳基础:琐碎

诱导步骤:


如果你看到和的序列和完美平方的序列一样,你还需要什么?这就是你要找的职位条件吗?你只是需要帮助证明它还是什么吗?好吧,这就是我最初的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