对程序进行推理的逻辑计算机科学导论第二讲教学课件_第1页
对程序进行推理的逻辑计算机科学导论第二讲教学课件_第2页
对程序进行推理的逻辑计算机科学导论第二讲教学课件_第3页
对程序进行推理的逻辑计算机科学导论第二讲教学课件_第4页
对程序进行推理的逻辑计算机科学导论第二讲教学课件_第5页
已阅读5页,还剩52页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、对程序进行推理的逻辑计算机科学导论第二讲计算机科学技术学院陈意yiyun/yiyun/课 程 内 容课程内容围绕学科理论体系中的模型理论, 程序理论和计算理论1. 模型理论关心的问题 给定模型M,哪些问题可以由模型M解决;如何比较模型的表达能力2. 程序理论关心的问题给定模型M,如何用模型M解决问题包括程序设计范型、程序设计语言、程序设计、形式语义、类型论、程序验证、程序分析等3. 计算理论关心的问题给定模型M和一类问题, 解决该类问题需多少资源 本次讲座讨论怎样用数学方法证明程序是正确的2讲 座 提 纲基本知识程序验证、程序逻辑、命题逻辑、谓词逻辑Hoare逻辑

2、Hoare三元式、赋值公理、结构化语句的推理规则、推论规则生成验证条件的演算最弱前条件演算、生成验证条件的演算程序验证实例演示二分查找程序3序 曲近几年软件错误带来危害的事例2012年,美国KCP金融公司由于电子交易系统出现故障,交易算法出错,导致该公司对150支不同的股票高价购进、低价抛出,直接给公司带来了4.4亿美元的损失,当天股票下跌62%2013年9月12日,美联航售票网站一度出现问题,售出票面价格为0-10美元的超低价机票,引发抢购。大约15分钟后,美联航发现错误,关闭售票网站并声称正在进行维护。大约两个多小时后,该公司售票网站恢复正常,并且承认已卖出的票有效4序 曲软件错误带来危害

3、的事例据自然杂志网站报道,广受世界天文学界期待的日本旗舰级天文卫星“瞳”(Hitomi)于2016年2月17日发射升空,但在大约5周之后便出现翻滚失控迹象。经调查后日本方面宣布,事故原因源自底层软件错误。卫星的控制系统在发现飞行姿态失控时,采取了错误的调整,推进器点火时朝向了错误的反方向,导致自身旋转更加严重,最终彻底失控5序 曲软件无处不在全世界有超过10亿辆汽车在行驶,每辆新汽车上都有2080个微处理器,有多达3000万行的代码在运行全世界每年有多达23亿次手术,在每个现代医疗设备上往往会有超过30万行的代码在运行全世界有超过3000辆高速列车在行驶,每辆列车上会有多达6000万行的代码在

4、运行全世界有超过300万架飞机,新型飞机上会有多达2000万行代码在运行如何保证这些代码没有错误?6基 本 知 识程序:在数组a中快速查找某个值int amn:0.m2.an 0) 的各种情况都要测试吗?对a中出现的各个元素都需要测试吗?对a中不出现的元素要测多少种情况?1015212832374449535762677177837基 本 知 识程序测试与程序验证测试能发现程序有错;一般而言,测试不能保证程序无错程序验证:用数学的方法来证明程序的性质,提高软件可信程度演绎验证:指用逻辑推理的方法来证明程序具备所期望的性质就所期望的性质而言,演绎验证可保证程序无错程序逻辑:对程序进行推理的逻辑8

5、基 本 知 识命题逻辑程序设计中用到命题逻辑的知识if (0 = m & m 100) 0 = m和m 100都是命题逻辑的原子命题 &是命题逻辑的二元运算符(下面用而非&)if (0 m | 0 = 100) ; n = n + 1; !是命题逻辑的一元运算符(下面用而不是 !)9基 本 知 识命题逻辑合式公式(well-formed formula)的归纳定义 := p | | | | | ( )(1) p代表原子命题,例如 x 3, a5 = 10.5 原子命题具体形式与讨论的问题领域有关(2) 代表一般命题,“:=”右部用“| ”分隔的各部分代表命题的构成形式,如 0= x x 100

6、(3) , , 和代表合取、析取、非和蕴涵运算,在确定了它们的运算优先关系后,很多情况下括号可以省略,如p (q1 q2)可简化为p q1 q2备注:蕴涵采用而不是 , 用于描述函数类型 10基 本 知 识命题逻辑推理规则例:有关合取“”运算的推理规则( i)(e1) (e2)“ i”表示合取引入规则(i: introduction)“ e”表示合取消去规则(e: elimination)对和等也都有各自的推理规则 11谓词逻辑程序设计中用到谓词逻辑的知识谓词:结果类型为bool的函数bool even(int m) /用编程语言写的谓词,与数理 if (m/2 * 2 = m) return

7、 true; /逻辑中的有区别 else return false; if(even(x) & even(y) 、=、=、!= 等关系算符都是谓词基 本 知 识12谓词逻辑合式公式(1) 谓词集合、函数集合(包括常量)(2) 基于来定义项集 t := x | c | f(t, , t) ( f ) 例如 a + 5 b 3中的a + 5和b 3(3) 归纳地定义基于( , )的合式公式 := P(t1, t2, , tn) | | | | | x | x | ( ) ( P )增加的规则全称量词断言和存在量词断言的证明规则等基 本 知 识13Hoare 逻 辑程序逻辑对程序进行推理的逻辑Hoa

8、re逻辑是一种程序逻辑介绍面向非常简单的编程语言(只有赋值语句、顺序语句、条件语句和循环语句)的Hoare逻辑推理规则14Hoare 逻 辑合式公式(well-formed formula)语法形式:P S Q,称为Hoare三元式(1) S是代码段,遵循相应编程语言的语法(2) P和Q是关于程序状态(变量到值的映射)的断言,分别称为S的前断言和后断言,断言是谓词逻辑的合式公式(3) 例: x = 1 y 5 x = x +1 x = 2 y 5P S Q的含义:在满足P的状态下执行S ,若执行终止,则终止状态满足Q例:x = 1 y 5 x = x +1 x = 2 y 1 y 0 y 6

9、x = x +1 x 6 是赋值公理的实例特点: x +1 6 (即x 5)是语句x = x+1和后断言x 6 的最弱前断言(1) x 5.1和x 7都可作为前断言,因都强于x 5x 5.1 x 5 并且x 7 x 5(2) 若x 4.9作为前断言,则三元式不成立,因为x 4.9 x 5不成立16Hoare 逻 辑结构化语句的推理规则顺序语句条件语句(也可用其它形式表示)插曲:推论规则P P P S Q Q Q P S QP E S1 Q P E S2 QP if E then S1 else S2 QP S1 R R S2 QP S1; S2 Q17Hoare 逻 辑例(用Hoare逻辑手工

10、证明简单程序段)证: true if (x y) z = x; else z = y; z = x z = y(1)由赋值公理:x = x x =yz = xz = x z =y(2) 由(1)的所得、(true x y) (x = x x = y)和推论规则,可得: true x y z = x z = x z = y(3) 同理得: true (x y) z = y z = x z = y(4) 得: true if (x y) z = x; else z = y;z = x z = yP E S1 Q P E S2 QP if E then S1 else S2 Q 由条件语句的规则18

11、Hoare 逻 辑结构化语句的推理规则(续)循环语句例:用自然数加法来完成自然数m和n相乘x = 0; y = 0;while (y n) x = x + m; y = y + 1; / x = m n 演算得到语句S和后断言I的最弱前条件:x+m = m(y+1) y+1 nIE S II while E do S IEI 被称为 循环不变式/循环不变式I:(x = my) (y n)19Hoare 逻 辑结构化语句的推理规则(续)循环语句例:用自然数加法来完成自然数m和n相乘x = 0; y = 0;while (y n) x = x + m; y = y + 1; / x = m n 演

12、算得到语句S和后断言I的最弱前条件:x+m = m(y+1) y+1 nIE S II while E do S IEI 被称为 循环不变式/循环不变式I:(x = my) (y n)分两步看,对于y = y + 120Hoare 逻 辑结构化语句的推理规则(续)循环语句例:用自然数加法来完成自然数m和n相乘x = 0; y = 0;while (y n) x = x + m; y = y + 1; / x = m n 演算得到语句S和后断言I的最弱前条件:x+m = m(y+1) y+1 nIE S II while E do S IEI 被称为 循环不变式/循环不变式I:(x = my)

13、(y n)分两步看,对于x = x + m21Hoare 逻 辑结构化语句的推理规则(续)循环语句例:用自然数加法来完成自然数m和n相乘x = 0; y = 0;while (y n) x = x + m; y = y + 1; / x = m n 证明I E 语句S和后断言I的最弱前条件:IE S II while E do S IEI 被称为 循环不变式/循环不变式I:(x = my) (y n)(x = my y n y n) (x+m = m(y+1) y+1 n)最后一行称为验证条件22Hoare 逻 辑小结用Hoare逻辑,可对简单程序进行手工推理证明手工体现在两方面(1) 手工用

14、推理规则进行演算或推理(2) 手工进行验证条件的证明(前例遇到蕴涵式的证明,第一讲对自动定理证明已略有介绍)虽是证明程序的一种方法,但低效、不能接受如何走向自动验证(以函数的正确性验证为例)(1) 函数的前条件和后条件必须由验证者给出(2) 把Hoare逻辑规则改成能自动推演的演算规则(3) 借助自动定理证明器证明验证条件23生成验证条件的演算最弱前条件(Weakest Precondition)演算WP函数WP : 程序集 断言集 断言集 WP(S, Q):计算P S Q的最弱前条件PHoare逻辑的赋值公理直接是最弱前条件演算的一条规则(1) 赋值公理:QE/x x = E Q(2) 赋值

15、语句的WP演算规则: WP (x =E, Q) = QE/x24生成验证条件的演算最弱前条件演算WP若一个函数的前后条件是P和Q,函数的代码是赋值语句序列S1, , Sn,那么(1) 逆向从Sn到S1连续使用赋值语句的WP规则,WP(S1, , WP(Sn, Q)它是保证执行上述代码段后得到Q的最弱前条件(2) 若P WP(S1, , WP(Sn, Q)得证,则代码段S1, , Sn对前后条件P和Q正确(3) P WP(S1, , WP(Sn, Q)称为验证条件强调:P蕴涵最弱前条件即可, 不必要求等于后者25生成验证条件的演算最弱前条件演算WPWP(x =E, Q) = QE/xQE/x x

16、 = E QWP(S1;S2, Q) = WP (S1, WP(S2, Q)WP(if E then S1 else S2, Q) =(WP(S1, Q) E) (WP(S2, Q) E)P S1 R R S2 QP S1; S2 QP E S1 Q P E S2 QP if E then S1 else S2 Q26生成验证条件的演算最弱前条件演算WP对于WP (while E do S, Q),演算有可能不终止 假定WPk为循环体S执行k次的演算 WP0(while E do S, Q) = E Q WPi (while E do S, Q) = E WP(S, WPi1(while E

17、do S, Q) WP(while E do S, Q) = WP0 () WP1 () WP2 () IE S II while E do S IE WP演算在循环语句这里遇到了困难27生成验证条件的演算最弱前条件演算WP一些其他规则(1) WP(S, Q1 Q2) = WP(S, Q1) WP(S, Q2) (2) WP(S, Q1 Q2) = WP(S, Q1) WP(S, Q2)(3)(4) WP(S, false) = false(4)和(5)较难理解, 不介绍(5) WP(S, true) = 保证S终止的最弱前条件 . 下面考虑解决由循环语句引出的问题Q QWP(S, Q) WP

18、(S, Q) 28生成验证条件的演算生成验证条件的演算VC(verification condition) (1) 观察P和WP之间的关系(2) 寻找两者之间的一种称为VC(S, Q)的演算(3) 即P VC(S, Q)WP(S, Q)(4) VC演算的特点:要求验证者提供循环不变式falsetruestrongweak Precondition(S, Q)最弱前条件 WP(S, Q)验证者提供的前条件P验证条件演算结果VC(S, Q)29生成验证条件的演算生成验证条件的演算VC(verification condition)除了循环语句外,VC演算与WP的一致循环语句的VC演算如下,其中I是

19、循环不变式VC(while E do S, Q) = I x1xn( I E VC(S, I) (I E Q)其中x1, , xn是在S中被修改的所有变量实际做法(1) 黄色部分和绿色部分 分别作为循环出口和入口的验证条件(2) I作为继续逆向VC演算的后断言IE S II while E do S IE30程 序 验 证 实 例void mult(int m, int n) x = 0 ; y = 0 ;while (y n) do x = x + m ;y = y + 1 ; 例子:用加运算来实现乘运算的函数31程 序 验 证 实 例n 0/ 前条件void mult(int m, int

20、 n) x = 0 ; y = 0 ;while (y n) do x = x + m ;y = y + 1 ; x = m n / 后条件由程序员提供由程序员提供32程 序 验 证 实 例n 0void mult(int m, int n) x = 0 ; y = 0 ;while (y n) do (x = my) (y n) / 循环不变式x = x + m ;y = y + 1 ; x = m n也由程序员提供33程 序 验 证 实 例n 0void mult(int m, int n) x = 0 ; y = 0 ;while (y n) do (x = my) (y n) / 循环

21、不变式x = x + m ;y = y + 1 ; x = m n函数前后条件、循环不变式都称为断言它们看上去像编程语言的布尔表达式34程 序 验 证 实 例n 0void mult(int m, int n) x = 0 ; y = 0 ;while (y n) do (x = my) (y n) x = x + m ;y = y + 1 ; (x = my) (y n) (y n) / 循环结束程序点的断言 x = m n I E 35程 序 验 证 实 例n 0void mult(int m, int n) x = 0 ; y = 0 ;while (y n) do (x = my) (

22、y n) x = x + m ;y = y + 1 ; (x = my) (y n) (y n) (x = mn) x = m nI E Q(Q是函数后条件)第1个验证条件36程 序 验 证 实 例n 0void mult(int m, int n) x = 0 ; y = 0 ;while (y n) do (x = my) (y n) x = x + m ;(x = m(y+1) (y+1) n)y = y + 1 ; (x = my) (y n) (x = my) (y n) (y n) (x = mn) x = m n 通过最弱前条件演算得到37程 序 验 证 实 例n 0void m

23、ult(int m, int n) x = 0 ; y = 0 ;while (y n) do (x = my) (y n) (x+m = m(y+1) (y+1) n) x = x + m ;(x = m(y+1) (y+1) n) y = y + 1 ;(x = my) (y n) (x = my) (y n) (y n) (x = mn) x = m n38程 序 验 证 实 例n 0void mult(int m, int n) x = 0 ; y = 0 ; I E VC(S, I)(S是循环体) (x =my) (y n) (y n) (x+m =m(y+1) (y+1) n)wh

24、ile (y n) do (x = my) (y n) (x+m = m(y+1) (y+1) n) x = x + m ;(x = m(y+1) (y+1) n) y = y + 1 ;(x = my) (y n) (x = my) (y n) (y n) (x = mn) x = m n第2个验证条件39程 序 验 证 实 例n 0void mult(int m, int n) x = 0 ;(x = m0) (0 n) y = 0 ;(x =my) (y n) (y n) (x+m =m(y+1) (y+1) n)while (y n) do (x = my) (y n) (x+m =

25、m(y+1) (y+1) n) x = x + m ;(x = m(y+1) (y+1) n) y = y + 1 ;(x = my) (y n) (x = my) (y n) (y n) (x = mn) x = m n40程 序 验 证 实 例n 0void mult(int m, int n) (0 = m0) (0 n) x = 0 ;(x = m0) (0 n) y = 0 ;(x =my) (y n) (y n) (x+m =m(y+1) (y+1) n)while (y n) do (x = my) (y n) (x+m = m(y+1) (y+1) n) x = x + m ;

26、(x = m(y+1) (y+1) n) y = y + 1 ;(x = my) (y n) (x = my) (y n) (y n) (x = mn) x = m n41程 序 验 证 实 例n 0 P VC(S, I) void mult(int m, int n) ( n 0 ) (0 = m0) (0 n)(0 = m0) (0 n) x = 0 ;(x = m0) (0 n) y = 0 ;(x =my) (y n) (y n) (x+m =m(y+1) (y+1) n)while (y n) do (x = my) (y n) (x+m = m(y+1) (y+1) n) x =

27、x + m ;(x = m(y+1) (y+1) n) y = y + 1 ;(x = my) (y n) (x = my) (y n) (y n) (x = mn) x = m n第3个验证条件P是函数前条件,S是循环之前的语句序列42程 序 验 证 实 例n 0void mult(int m, int n) ( n 0 ) (0 = m0) (0 n)x = 0 ;y = 0 ;(x =my) (y n) (y n) (x+m =m(y+1) (y+1) n)while (y n) do (x = my) (y n) x = x + m ;y = y + 1 ; (x = my) (y n

28、) (y n) (x = mn) x = m n 由自动定理证明器完成验证条件的证明43程 序 验 证 实 例程序:二分查找#define m 15int amn:0.m2.an an+1用二分法在数组a15中快速查找3810152128323744495357626771778344程 序 验 证 实 例程序:二分查找val = 38, i = 0, j = 14, k = 7i = 0; j = 14;while(i = j) k = i + (j i)/2; if(val = ak) i = k + 1;if (i 1 j) 找到 else 没有找到1015212832374449535

29、76267717783ijk观察点45程 序 验 证 实 例程序:二分查找val = 38, i = 0, j = 6, k = 3i = 0; j = 14;while(i = j) k = i + (j i)/2; if(val = ak) i = k + 1;if (i 1 j) 找到 else 没有找到101521283237444953576267717783ijk观察点46程 序 验 证 实 例程序:二分查找val = 38, i = 4, j = 6, k = 5i = 0; j = 14;while(i = j) k = i + (j i)/2; if(val = ak) i

30、= k + 1;if (i 1 j) 找到 else 没有找到101521283237444953576267717783ijk观察点循环不变性: a0到ai-1都小于38 aj+1到a14都大于3847程 序 验 证 实 例程序:二分查找val = 38, i = 6, j = 6, k = 6i = 0; j = 14;while(i = j) k = i + (j i)/2; if(val = ak) i = k + 1;if (i 1 j) 找到 else 没有找到101521283237444953576267717783ijk观察点循环不变性: a0到ai-1都小于38 aj+1到

31、a14都大于3848程 序 验 证 实 例程序:二分查找val = 38, i = 6, j = 5, k = 6i = 0; j = 14;while(i = j) k = i + (j i)/2; if(val = ak) i = k + 1;if (i 1 j) 找到 else 没有找到101521283237444953576267717783ijk条件不成立49程 序 验 证 实 例程序:二分查找val = 37, i = 4, j = 6, k = 5 (若val改成37)i = 0; j = 14;while(i = j) k = i + (j i)/2; if(val = ak

32、) i = k + 1;if (i 1 j) 找到 else 没有找到101521283237444953576267717783ijk观察点循环不变性: a0到ai-1都小于38 aj+1到a14都大于3850程 序 验 证 实 例程序:二分查找val = 37, i = 6, j = 4, k = 5 (若val改成37)i = 0; j = 14;while(i = j) k = i + (j i)/2; if(val = ak) i = k + 1;if (i 1 j) 找到 else 没有找到101521283237444953576267717783jik条件不成立51程 序 验 证 实 例程序:二分查找的主要程序段和断言int i, j, k, val, am; /此前有#define m 15m = 15 (n:0.m2.an an+1) i = 0 j = m1while(i = j) m=15 (n:0.m2.an an+1) 0 i m 1 j m1 (ji 1(n:j+1.m1. val an) ji = 2 k = i1 val = ak ) /循环不变式, 含黄色部分 k = i + (j i)/2; if(val = ak) i = k + 1;m = 15 (n:0.m2.an an+1) (ij

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论