程序正确性证明(课堂ppt)课件.ppt





《程序正确性证明(课堂ppt)课件.ppt》由会员分享,可在线阅读,更多相关《程序正确性证明(课堂ppt)课件.ppt(54页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用第5讲 程序正确性证明1经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用 5.1 程序正确性概述n什么样的程序才是正确的?n如何来保证程序是正确的?2经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用关于程序正确性的认识u什么样的程序才是正确的?“测试测试”或或“调试调试”方法方法根据问题的特性和软件所要实
2、现的功能,选择一些具有代表性的数据,设计测试用例。通过用例程序执行,去发现被测试程序的错误。采用采用“测试测试”方法可以发现程序中的错误,方法可以发现程序中的错误,但却不能证明程序中没有错误!但却不能证明程序中没有错误!因此,为保证程序的正确性,必须从理论上因此,为保证程序的正确性,必须从理论上研究有关研究有关“程序正确性证明程序正确性证明”的方法。的方法。3经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序正确性证明发展历程u20世纪50年代 Turing开始研究。u1967年,Floyd和Naur提出不变式
3、断言法。u1969年,Hoare提出公理化方法。u1975年,Dijkstra提出最弱前置谓词和程序推导方法,解决了断言构造难的问题,可从程序规约推导出正确程序,使正确性证明变得实用。程序正确性理论是十分活跃的课题,不仅可程序正确性理论是十分活跃的课题,不仅可以证明顺序程序的正确性,而且还可以证明非确以证明顺序程序的正确性,而且还可以证明非确定性程序,以及并行程序的正确性。定性程序,以及并行程序的正确性。4经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序正确性理论u程序设计的一般过程5经营者提供商品或者服务有
4、欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序正确性理论u程序功能的精确描述1、程序规约程序规约:对程序所实现功能的精确描述,由程序的前置断言和后置断言两部分组成。2、前置断言前置断言:程序执行前的输入应满足的条件,又称为输入断言。3、后置断言后置断言:程序执行后的输出应满足的条件,又称为输出断言。程序设计过程:问题 程序规约 程序6经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序规约的基本分类u非形式化程序规约 非形式化程序规约采用自然语言描述
5、程序功能,简单、方便,但存在二义性,因此,不利于程序的正确性证明。u形式化程序规约 采用数学化的语言描述程序功能,描述精确,无二义性,便于程序的正确性证明。7经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序规约的实例u在书写程序规约时,使用Q表示前置断言,R表示后置断言,S表示问题求解的实现程序。在前置断言Q之前,还必须给出Q和R中所出现的标识符的必要说明。例例1:求数组:求数组b0:n-1中所有元素的最大值。中所有元素的最大值。in n:integer;in b0:n-1:array of integer;
6、out y:integer Q:n 1 S R:y MAX(i:0 i n;bi)例例2:求两个非负整数的最大公约数。:求两个非负整数的最大公约数。in a,b:integer;out y:integer8经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序规约的实例例例2:求两个非负整数的最大公约数。:求两个非负整数的最大公约数。in a,b:integer;out y:integer Q:a 0 b 0 S R:y MAX(i:1 i min(a,b)(a mod i 0)(b mod i 0)9经营者提供商
7、品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序正确性定义u衡量一个程序的正确性,主要看程序是否实现了问题所要求的功能。若程序实现了问题所要求的功能,则称它为正确的,否则是不正确的。u对程序的正确性理解,可以分为两个层次:从广义来说,一个程序的正确性取决于该程序满足问题实际需求的程度。从狭义而言,如果一个程序满足了它的程序规约就是正确的。程序设计过程:问题 程序规约 程序10经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序正确性定义u程
8、序规约QSR是一个逻辑表达式,其取值为真或假。其中取值为真的含义是指:给定一段程序S,若程序开始执行之前Q为真,S的执行将终止,且终止时R为真,则称为“程序S,关于前置断言Q和后置断言R是完全正确的”。11经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序正确性定义u部分正确部分正确:若对于每个使得Q(i)为真,并且程序S计算终止的输入信息i,R(i,S(i)都为真,则称程序S关于Q和R是部分正确的。u程序终止程序终止:若对于每个使得Q(i)为真的输入i,程序S的计算都终止,则称程序S关于Q是终止的。u完全正确
9、完全正确:若对于每个使得Q(i)为真的输入信息i,程序S的计算都将终止,并且R(i,S(i)都为真,则称程序S关于Q和R是完全正确的。u一个程序的完全正确,等价于该程序是部分正确,同时又是终止的。12经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用程序正确性的证明方法分类u证明部分正确性的方法 A.Floyd的不变式断言法的不变式断言法 B.Manna的子目标断言法的子目标断言法 C.Hoare的公理化方法的公理化方法u终止性证明的方法 A.Floyd的良序集方法的良序集方法 B.Knuth的计数器方法的计数器方
10、法 C.Manna等人的不动点方法u完全正确性的方法 A.Hoare公理化方法的推广 B.Burstall的间发断言法 C.Dijkstra的弱谓词变换方法以及强验证方法13经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用循环不变式断言u把反映循环变量的变化规律变化规律,且在每次循环体的执行前后均为真的逻辑表达式称为该循环的不变式断不变式断言言。例例 带余整数除法问题:设带余整数除法问题:设x为非负整数,为非负整数,y为正整数,求为正整数,求 x除以除以y的商的商q,以及余数以及余数r。程序:程序:q0;rx;w
11、hile(r y)/该循环不变式断言:该循环不变式断言:r ry;q q1;/(xyqr)r 014经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用5.2 不变式断言法u证明步骤:1、建立断言建立断言建立程序的输入、输出断言输入、输出断言,如果程序中有循环出现的话,在循环中选取一个断点,在断点处建立一个循循环不变式断言。环不变式断言。2、建立检验条件建立检验条件将程序分解为不同的通路,为每一个通路建立一个检验条件,该检验条件为如下形式:I R=O 其中I为输入断言,R为进入通路的条件,O为输出断言。3、证明检验条
12、件证明检验条件运用数学工具证明步骤2得到的所有检验条件,如果每一条通路检验条件都为真,则该程序为部分正确的。15经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用不变式断言法实例1u例:设x,y为正整数,求x,y的最大公约数z的程序,即z=gcd(x,y)。Function gcd(x1,x2:integer);var y1,y2,z:Integer;Beginy1:=x1;y2:=x2;while(y1y2)do if(y1y2)y1:=y1-y2 else y2:=y2-y1 z:=y1;write(z);En
13、dSTART(x1,x2)(y1,y2)y1y2y1y2y1:=y1-y2y2:=y2-y1z:=y1STOPTFTF16不变式断言法实例1(建立断言)u输入断言:输入断言:I(x1,x2):x10 x20u输出断言:输出断言:O(x1,x2,z):z=gcd(x1,x2)u循环不变式断言:循环不变式断言:P(x1,x2,y1,y2):x10 x20 y10 y20 gcd(y1,y2)=gcd(x1,x2)通路划分:通路划分:通路1:a-b通路2:b-d-b通路3:b-e-b通路4:b-g-cSTART(x1,x2)-(y1,y2)y1y2y1y2y1:=y1-y2y2:=y2-y1z:=y
14、1STOPTFTFI(x1,x2)aP(x1,x2,y1,y2)bcO(x1,x2,z)deg17经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用不变式断言法实例1(建立检验条件)u检验条件:I R=Ou通路1:I(x1,x2)=P(x1,x2,y1,y2)x10 x20=x10 x20 y10 Y20 gcd(y1,y2)=gcd(x1,x2)u通路2:P(x1,x2,y1,y2)y1y2 y1y2=P(x1,x2,y1-y2,y2)x10 x20 y10 y20 gcd(y1,y2)=gcd(x1,x2)y1
15、y2 y1y2=x10 x20 y1-y20 y20 gcd(y1-y2,y2)=gcd(x1,x2)18经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用不变式断言法实例1(建立检验条件)u通路3:P(x1,x2,y1,y2)y1y2 y1 P(x1,x2,y1,y2-y1)x10 x20 y10 y20 gcd(y1,y2)=gcd(x1,x2)y1y2 y1x10 x20 y10 y2-y10 gcd(y1,y2-y1)=gcd(x1,x2)u通路4:P(x1,x2,y1,y2)y1=y2=O(x1,x2,z
16、)x10 x20 y10 y20 gcd(y1,y2)=gcd(x1,x2)y1=y2 =z=gcd(x1,x2)19经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用不变式断言法实例1(证明检验条件)u通路1:x10 x20 x1=y1 x2=y2=u通路2:若y1y2,gcd(y1-y2,y2)=gcd(y1,y2)=gcd(x1,x2)u通路3:若y2y1,gcd(y1,y2)=gcd(y1,y2-y1)=gcd(x1,x2)u通路4:若y1=y2,gcd(y1,y2)=gcd(x1,x2)=y1=y2=z
17、P(x1,x2,y1,y2)y1=y2=O(x1,x2,z)20经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用不变式断言法实例2u对任一给定的自然数对任一给定的自然数x,计算计算z ,即计算即计算x的平方根取整。的平方根取整。13(2n+1)=(n+1)2 y1=n;y3=2y1+1;y2=(y1+1)2输入断言:I(x):x0输出断言:O(x,z):z2 x(y1,y2,y3)y2+y3y2y2x(y1+1,y3+2)(y1,y3)y1z结束A I(x)B P(x,y1,y2,y3)DC O(x,z)TF21
18、经营者提供商品或者服务有欺诈行为的,应当按照消费者的要求增加赔偿其受到的损失,增加赔偿的金额为消费者购买商品的价款或接受服务的费用不变式断言法实例2u检验条件:I R=Ou通路1:A-BI(x)=P(x,0,1,1)x0=0 x 1=(0+1)2 1=2*0+1u通路2:B-D-BP(x,y1,y2,y3)y2x=p(x,y1+1,y2+y3+2,y3+2)y12x y2=(y1+1)2 y3=2y1+1 y2x=(y1+1)2 x y2+y3+2=(y1+1+1)2 y3+2=2(y1+1)+1u通路3:B-CP(x,y1,y2,y3)y2x=O(x,y1)y12 x y2=(y1+1)2
19、y3=2y1+1 y2x=y12 x (y1+1)2 x y2+y3+2=(y1+1+1)2 y3+2=2(y1+1)+1证明:x(y1+1)2(y2 x,y2=(y1+1)2)y2+y3+2=(y1+1)2+2y1+1+2=(y1+1)2+2(y1+1)+1=(y1+1+1)2 y3+2=2y1+1+2=2(y1+1)+1u检验条件3y12 x y2=(y1+1)2 y3=2y1+1 y2x=y12 x(y1+1)2 证明:y12 x xx=0 y0=0 u输出断言:O(x,y,z):z=gcd(x,y)u循环不变式断言:P(x,y):x=0 y=0 gcd(x,y)=gcd(x0,y0)n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序 正确性 证明 课堂 ppt 课件

限制150内