- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
一种程序推导和验证方法研究
一种程序推导和验证方法研究
作者简介作者简介:张哲(1984-),男,宁夏大学数学计算机学院硕士研究生,研究方向为软件方法;丁志义(1968-),男,博士,宁夏大学数学计算机学院教授,研究方向为软件形式方法。0引言
软件的可靠性越来越受到重视,从上世纪60年代人们就开始研究各种不同的正确性验证方法[1]。其中有Floyd 的不变式断言法、Hoare的公理化方法、Dijkstra 的最弱前置谓词变换法等。本文只讨论最弱前置谓词法和公理化方法。
1最弱前置条件
程序设计必须满足规范要求。人们通常通过调试来解决该问题,但调试不可能根除错误。
程序正确性的一种表示:{Q}S{R}。如果程序S由满足断言Q的一个状态开始执行,那么S将终止,并且终止时的状态满足断言R。其中Q和R分别称作前置断言(条件)和后置断言(条件)。
程序的正确性是相对于规范而言的。即S满足了的要求,S相对于是正???的。程序的正确性包含两个因素:①程序要终止;②终止后要满足规范要求,二者缺一不可。
定义:最弱前置条件WP(S,R)。
给定程序S和S执行终止时应满足的后置条件R,定义WP(S,R)为S和R的最弱前置条件,它是一个谓词并规定了所有这样的状态集合,使得程序S由这样的状态开始执行并终止于满足R的状态。
2程序设计语言的WP及Hoare公理化系统规则基于WP的概念,程序可以被理解为谓词转换算子。可以通过程序的外在表现(前置谓词、后置谓词)来定义程序,这就是程序的WP语义的含义。
程序语句5种基本成分(空语句、赋值语句、复合语句、条件语句和循环语句)的WP语义如下:
空语句 :wp(skip,R)=R
赋值语句:wp(X:=E,R)=REX
复合语句: wp(S1;S2,R)=wp(S1,wp(S2,R))
条件语句: wp(IF,R)=(??j:1≤j≤n:Bj) and (??j:1≤j≤n:Bj??wp(SLj,R))
循环语句: wp(DO,R)=(??k:k≥0:Hk(R))
Hoare的逻辑推理规则为:
[ass p ]{P[x|?? A[a]]}x: = a{P}
[skip p ]{P}skip {P}
[comp p ]{P}S1 {Q},{Q}S2 {R}{P}S1 ;S2 {R}
[ifp ]{B[b]∧P}S1 {Q},{
?瘙 ? B[b]∧P}S2 {Q}{P}ifbthenS1elseS2 {Q}
[whilep ]{B[b]∧P}S{P}{p}whilebdoS{
?瘙 ? B[b]∧P}
[consp ]{P}S{Q}{P}S{Q}ifP??P and Q??Q
3实例分析
例:对于一个整型数组a和常量n(n0),数组的元素为a[i](0≤in),求数组元素中的最大值。
(1)用最弱前置谓词法推导程序。由题意可得后置谓词R:
R:0≤knand(??i:0≤in:a[k]≥a[i])
按照不变式的寻找方法(变量j来替换常量n), P定义为:
P:0≤kj≤nand(??i:0≤ij:a[k]≥a[i])
由P和 R的定义可以得到:(P∧j=n)??R。必须找出一个简单的初始条件来以验证P是否可用,可以得到:
(k=0∧j=1)??P
程序结构如下:
k,j:=0,1{P成立}
doj≠n→保持 P 不变的情况下建立一个步骤,并且此步骤要朝 j=n变化od (最终 R成立)。选择一个单调递减的有限函数t,t应该与j和n有关系,选择t=(n-j),P??(t≥0)。每次让j递增 1以保证t的递减性,求:
wp(j:=j+1,P)=0≤kj+1≤nand(??i:0≤ij+1:a[k]≥a[i])
=0≤kj+1≤nand(??i:0≤ij:a[k]≥a[i]anda[k]≥a[j]
知道:
(P∧j≠n)??0≤kj+1≤nand(??i:0≤ij:a[k]≥a[i]。
因为(j≤n)∧(j≠n)??(j+1≤n),所以让j 每次增加 1,得到:(P∧j≠n∧a[k]≥a[j])??wp(j:=j+1,P)。改进程序如下:
k,j:=0,1;doj≠n→ifa[k]≥a[j]→j:=j+1fiod
如果上述程序能够正确终止,确实能够得到正确结果。但是还不能确定是否能够终止,因为循环结构会导致中断,如果k=0 不满足R,那么就会导致中断。如果a[k]≥a[j]不成立,那么可以通过赋值 k:=j来使它成立。下面来计算:
wp(k,j:=j,j+1,P)=
0≤jj+1≤nan
原创力文档


文档评论(0)