一种程序推导和验证方法研究.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 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)

317960162 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档