Logic 如何使用Hoare'演示一个带有while循环的程序的正确性;这是什么逻辑?

Logic 如何使用Hoare'演示一个带有while循环的程序的正确性;这是什么逻辑?,logic,proof,computation-theory,proof-of-correctness,hoare-logic,Logic,Proof,Computation Theory,Proof Of Correctness,Hoare Logic,如何通过霍尔逻辑证明一个有一个while循环的程序的正确性。如果有人用任何例子来开发它,那将是非常有趣的,因为我要解决的问题是: 前提条件={n>0} cont:=n; 总和:=0; 而cont 0则执行以下操作: 总和:=总和+续; cont:=cont-1; 循环结束 后置条件={sum=1+2+…+n} 没有必要发展这个例子。我只是需要理解这个过程,因为我没有一个实际的例子。谢谢您的时间。此处必须应用霍尔逻辑: 如果命令S满足形式{p]的霍尔三元组∧ B} S{P},则当B执行S时,命令

如何通过霍尔逻辑证明一个有一个while循环的程序的正确性。如果有人用任何例子来开发它,那将是非常有趣的,因为我要解决的问题是:

前提条件={n>0}

cont:=n;
总和:=0;
而cont 0则执行以下操作:
总和:=总和+续;
cont:=cont-1;
循环结束
后置条件={sum=1+2+…+n}

没有必要发展这个例子。我只是需要理解这个过程,因为我没有一个实际的例子。谢谢您的时间。

此处必须应用霍尔逻辑:

如果命令
S
满足形式
{p]的霍尔三元组∧ B} S{P}
,则当B执行S时,命令
满足
{P},而B执行S{P}∧ ..B}

这是在霍尔逻辑中证明
while
循环后条件的唯一技术,因此必须应用它。代码中给出了条件
B
和循环体
S
,但是
P
可以是您选择的任何条件,只要
{P∧ B} S{P}
有效

这个Hoare三重断言,如果在循环迭代之前
p
为真,那么在循环迭代之后它仍然为真,因此这种条件
p
称为a。为了证明循环的后置条件,您需要确定(1)在循环的第一次迭代之前
P
为真,以及(2)循环体保留
P

在您的示例中,循环所需的不变量是
sum=n+(n-1)+…+(cont+1)
,即从
cont+1
n
的数字之和。一般来说,没有系统的方法找到合适的循环不变量来使用;你必须利用你对算法的理解,以及你的直觉/经验,自己想出一个算法


这足以表明,如果循环终止,则其后条件将得到满足;您还需要确定循环是否终止。你应该在这里应用的技巧是找到一个;这通常是一个整数,它(1)在循环的每次迭代中都会减少,(2)在数量为零时导致循环终止

在您的示例中,
cont
是循环变量,因为循环递减
cont:=cont-1
,循环条件在
cont
达到零时终止循环。一般来说,与查找有用的不变量一样,没有系统的过程可以在所有情况下查找变量,但您可以从查看循环条件开始,查看哪些变量决定循环何时终止。

此处必须应用霍尔逻辑:

如果命令
S
满足形式
{p]的霍尔三元组∧ B} S{P}
,则当B执行S
时,命令
满足
{P},而B执行S{P}∧ ..B}

这是在霍尔逻辑中证明
while
循环后条件的唯一技术,因此必须应用它。代码中给出了条件
B
和循环体
S
,但是
P
可以是您选择的任何条件,只要
{P∧ B} S{P}
有效

这个Hoare三重断言,如果在循环迭代之前
p
为真,那么在循环迭代之后它仍然为真,因此这种条件
p
称为a。为了证明循环的后置条件,您需要确定(1)在循环的第一次迭代之前
P
为真,以及(2)循环体保留
P

在您的示例中,循环所需的不变量是
sum=n+(n-1)+…+(cont+1)
,即从
cont+1
n
的数字之和。一般来说,没有系统的方法找到合适的循环不变量来使用;你必须利用你对算法的理解,以及你的直觉/经验,自己想出一个算法


这足以表明,如果循环终止,则其后条件将得到满足;您还需要确定循环是否终止。你应该在这里应用的技巧是找到一个;这通常是一个整数,它(1)在循环的每次迭代中都会减少,(2)在数量为零时导致循环终止

在您的示例中,
cont
是循环变量,因为循环递减
cont:=cont-1
,循环条件在
cont
达到零时终止循环。一般来说,与查找有用的不变量一样,没有系统的过程可以在所有情况下查找变量,但您可以从查看循环条件开始,查看哪些变量决定循环何时终止

cont := n;
sum := 0;
while cont <> 0 do:
    sum := sum + cont;
    cont := cont-1;
endwhile