程序的形式验证 – 内容 中国科学院软件研究所 张文辉 http://lcs.ios.ac.cn/~zwh/pv.

Slides:



Advertisements
Similar presentations
完美殺人筆記簿 【爸!我受夠了!】 第七組組員: 林正敏 陳筱涵 李蓓宇 許純宜 羅玉芬 謝文軒.
Advertisements

当一切只剩断瓦颓垣的时候,我们只能把记忆 连根拔起。为了重建,必须先要毁灭。 落叶出版社 主编: curtian#
“ 上海市科研计划课题预算编制 ” 网上教程 上海市科委条财处. 经费预算表 表 1 劳务费预算明细表 表 2 购置设备预算明细表 表 3 试制设备预算明细表 表 4 材料费预算明细表 表 5 测试化验与加工费预算明细表 表 6 现有仪器设备使用费预算明细表 小于等于 20 万的项目,表 2 ~表.
人的性别遗传 合肥市第四十九中学 丁 艳. 男女成对染色体排序图 1 、男性和女性各 23 对染色体有何异同 ? 哪 一对被称为性染色体 ? 2 、这两幅图中,哪幅 图显示的是男性的染色 体?哪幅图显示的是女 性染色体? 3 、图中哪条染色体是 Y 染色体?它与 X 染色体 在形态上的主要区别是.
yyx1 按鍵換頁 音樂:俄羅斯田野! 按鍵換頁 音樂:俄羅斯田野! yyx2 由於媒體的片面性,國內很多人對俄羅斯的印象是貧窮,酗酒,黑社會 …… 我有 幸在那裏生活過一段時間,考察了一些城市,我感覺俄羅斯人生活的很悠閒,甚 至很幸福。
社交礼仪.
专题一 集合与常用逻辑用语、不等式.
損益表 原則: 收益與費用的計算,實際上是在實現或發生時所產生,與現金收付當時無關。
報告者:蕭曄鴻 班級:溫馨甲孝 指導教授:李開濟博士
1、一般地说,在生物的体细胞中, 和 都是成对存在的。
辨性别 A B. 辨性别 A B 第三节人类染色体与性别决定 昌邑市龙池初中 杨伟红 学习目标 1.理解人的染色体组成和传递规律。 2.解释人类性别决定的原理。 3.通过探究活动,解读数据了解生男生女的比例。
复习: :对任意的x∈A,都有x∈B。 集合A与集合B间的关系 A(B) A B :存在x0∈A,但x0∈B。 A B A B.
这是一个数字的 乐园 这里埋藏着丰富的 宝藏 请跟我一起走进数学的 殿堂.
單元名稱: 健康的兩性交往.
《中国共产党发展党员工作细则》 学习提纲 中共进贤县委组织部 宋 剑
严格发展程序,提高工作能力 黄 玉 2010年9月.
发展党员的流程和要求 党委组织部 萧炽成.
1.2.2《函数的表示法》.
莫让情感之船过早靠岸 兴庆回中 赵莉.
行政公文写作 第七章 2004年8月 行政公文写作.
论文撰写的一般格式和要求 孟爱梅.
律师公司业务实务 北京市嘉润道和律师事务所 龚志忠 2011年10月21日.
第三章 幼儿园课程内容的编制与选择.
第三章  电话、电子通讯   本章重难点:     打电话的方法、         接听电话的方法。
电话联系.
迎宾员礼仪 包头机电工业职业学校管理系 白琳 1.
第九章 多元函数微分法 及其应用 一元函数微分学 推广 多元函数微分学 注意: 善于类比, 区别异同.
1.1.2 四 种 命 题.
3-2 解一元一次方程式 1.一元一次方程式的意義 2.一元一次方程式的解 3.等量公理 與移項法則 自我評量 例題1 例題2 例題3
色 弱 與 色 盲.
《社交礼仪分享》 阳晨牧业科技有限公司 市场中心 二O一二年四月十八日.
会议文书.
宠物之家 我的宠物性别? 雌(♀) or 雄(♂) 第一阶段:我的宠物我做主 第二阶段:宠物“相亲记” 第三阶段:家族诞生
如何写入团申请书.
财 务 会 计 第四篇:供应链会计实务 制作人:谌君、熊瑜.
一次函数.
计算机基础知识 丁家营镇九年制学校 徐中先.
程序的形式验证 - 简介 中国科学院软件研究所 张文辉 1.
《数据库原理及应用》课程介绍 信息工程学院 孙俊国
第11周 工作计划.
管理信息结构SMI.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
模型验证器VERDS Wenhui Zhang 31 MAY 2011.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
第九章 結 帳 9-1 了解結帳的意義及功能 9-2 了解虛帳戶結清之會計處理 9-3 了解實帳戶結轉的會計處理
二元一次聯立方程式 代入消去法 加減消去法 自我評量.
$9 泛型基础.
程序的形式验证 张文辉
中国大连高级经理学院博士后入站申请汇报 汇报人:XXX.
內部控制作業之訂定與執行 報告人:許嘉琳 日 期:
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
1.非线性规划模型 2.非线性规划的Matlab形式
利用平方差公式因式分解 利用和的平方公式因式分解 利用差的平方公式因式分解 綜合運用
C ( )下圖有 4 個邊長為 x 的正方形,4 個 長為 x、寬為 1 的長方形,以及 1 個 邊長為1 的正方形,則這 9 個圖形的
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 算术运算符 视频提供:昆山爱达人信息技术有限公司.
《离散结构》 二元运算性质的判断 西安工程大学计算机科学学院 王爱丽.
滤波减速器的体积优化 仵凡 Advanced Design Group.
第八章 服務部門成本分攤.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
高观点下的若干初等数学问题 是非判断题的代数方法 主讲:陈永珠 学校:温州第二高级中学.
6.3一次函数图象(2).
百雞問題 製作者:張美玲 資料來源:數學誕生的故事—凡異出版社.
第二章 一元一次不等式和一元一次不等式组 回顾与复习(一).
义务教育教科书 数学 七年级 上册 3.1 从算式到方程(第2课时) 一元一次方程.
第二次课后作业答案 函数式编程和逻辑式编程
Presentation transcript:

程序的形式验证 – 内容 中国科学院软件研究所 张文辉 http://lcs.ios.ac.cn/~zwh/pv

程序的形式验证 程序正确性: 测试 输入/输出 阅读 判断/分析/推理 形式验证 定义/性质/验证 int f(int n) { int x=n; int y=1; while (x!=0) { y=y*x; x--; } return y; } 2

程序形式验证的相关内容 程序正确性: 程序形式验证的基本概念 从系统运行角度考虑程序正确性问题 从程序设计的角度考虑程序正确性问题 系统运行模型的类型 系统性质的表示方法 验证方法 多种知识的应用(内容比较杂) 3

程序的形式验证 程序正确性: 程序正确性的最终体现: 以给定程序为主要组成部分的软件系统 具备我们期望的性质 4

程序正确性 程序 + 计算环境 性质 5

程序正确性 程序 + 计算环境 性质 系统模型 公式 6

形式验证 系统模型 公式 7

程序正确性的形式验证 软件 系统 运行过程 性质 抽象描述 或 模型 验证方法 逻辑公式 8

主要内容 程序正确性 系统运行模型 系统性质的表示 验证方法

程序正确性 从系统运行角度考虑问题: x=getnum(); y=1; while (x>1) { y=x*y; x=x-1; } printnum(y);

软件系统运行的正确性 程序 应用软件 软件系统运行 系统软件 计算机硬件 程序正确性 计算正确性 .

计算过程和结果 x=getnum(); y=1; while (x>1) { y=x*y; x=x-1; } printnum(y); 运行时刻 0: (pc,x,y)=(…,0,0) 运行时刻 1: (pc,x,y)=(…,5,0) 运行时刻 2: (pc,x,y)=(…,5,1) 运行时刻 3: (pc,x,y)=(…,..,..) 运行时刻 4: 0 1 2 3 4 …… 0 ’1’ 2’ 3 ’4’ ……

软件系统的每个运行的正确性 (pc,x,y)=(..,0,0) ------------------- (pc,x,y)=(..,3,0) -------------------- (pc,x,y)=(..,2,0) (pc,x,y)=(..,2,1) (pc,x,y)=(..,2,2) (pc,x,y)=(..,1,2) -

每个运行的模型的正确性 (pc,x,y)=(s0,0,0) ------------------- (pc,x,y)=(s1,3,0) -------------------- (pc,x,y)=(s1,2,0) (pc,x,y)=(s2,2,1) (pc,x,y)=(s3,2,1) (pc,x,y)=(s4,2,2) (pc,x,y)=(s5,1,2) (pc,x,y)=(s6,1,2) (pc,x,y)=(s7,1,2) -

运行集合的模型的正确性 (pc,x,y)=(s0,0,0) ------------------- (pc,x,y)=(s1,3,0) -------------------- (pc,x,y)=(s1,2,0) (pc,x,y)=(s2,2,1) (pc,x,y)=(s3,2,1) (pc,x,y)=(s4,2,2) (pc,x,y)=(s5,1,2) (pc,x,y)=(s6,1,2) (pc,x,y)=(s7,1,2) - (pc,x,y)=(s0,0,0) -------------------- . -

运行集合的模型的正确性 软件系统的运行模型的正确性 软件系统的模型的正确性 隐式迁移关系的描述 显式迁移关系的描述

隐式迁移关系的描述 x=n; y=1; while (x>1) { y=x*y; x=x-1; } z=y; 系统初始状态: x=0y=0 z=0m>n>0 (给定m) 系统终止要求: z=n! 系统运行要求: z!=0  z=n!

隐式迁移关系的描述 x=n; y=1; while (x>1) { y=x*y; x=x-1; z=y; } 系统初始状态: x=0y=0 z=0m>n>0 (给定m) 系统终止要求: z=n! 系统运行要求: z!=0  z=n!

显式迁移关系的描述 给定m=4 系统运行要求: (xi=1)  (yi+1=x1!) (s0,0,0) (s1,3,0) (s2,3,1)

程序的形式验证 程序正确性 软件系统运行/计算过程和结果的正确性 软件系统的每个运行的正确性 (测试) 软件系统的每个运行的模型的正确性 软件系统的运行集合的模型的正确性 软件系统的模型的正确性 (验证) 系统模型的有限表示 系统性质的逻辑表示 系统模型是否满足系统性质的验证方法

程序正确性 从程序设计的角度考虑问题: 系统需求 系统设计 代码生成/程序编写 编译

程序正确性 系统需求 系统设计 应用软件 软件系统运行 代码生成/程序编写 系统软件 编译 计算机硬件 系统设计是否满足系统需求?

程序正确性 系统需求 逻辑表示 (部分用) 系统设计 形式描述 (部分用) 代码生成/程序编写 程序 编译

系统需求 输入 正整数 输出 该整数的阶乘 以变量n代表输入值 以变量z代表输出值 系统初始状态的刻画(逻辑公式): n>0 系统终止状态的要求(逻辑公式): z=n!

系统设计(1) x=n; y=1; while (x>1) { y=x*y; x=x-1; } z=y; 系统初始状态: x=0y=0 z=0n>0 系统终止要求: z=n! 系统运行要求: z!=0  z=n!

系统设计(2) begin (x,y)=(n,1) s1 x>1 s2 s3 (x,y)=(x-1,y*x) (z)=(y) end

系统设计(2) begin (x,y)=(n,1) 4>n>0 s1 x>1 z=n! s2 s3 (x,y)=(x-1,y*x) (z)=(y) end

系统设计(2) z!=0  z=n! begin (x,y)=(n,1) 4>n>0,z=0 s1 x>1 z=n! (x,y)=(x-1,y*x) (z)=(y) end

程序的形式验证 软件系统需求 软件系统设计 软件系统实现 (代码生成/程序编写) 软件系统的安装 软件系统的运行 部分系统需求的逻辑表示 部分系统设计的形式描述 系统设计是否满足系统需求的验证方法

系统运行模型 离散模型 混成模型 实时模型

离散系统运行模型(1) 系统运行(状态、迁移) 系统运行离散模型 r  (S) 或者说 r : N  S 或直接表示为r  (2AP) 系统运行集合 = { r | r  M } s0 s1 s2 s3

离散系统运行模型(2) 系统运行(状态、迁移、状态基本信息) 系统运行离散模型 r  (S) 且 L: S  2AP 或者说 r : N  S 或直接表示为r  (2AP) 或 r : N  2AP 系统运行集合 = { r | r  M } {x=1,y=0} {x=1,y=1} s0 s1 s2 s3

离散系统运行模型(3) 系统运行(动作信息) 系统运行离散模型 r  (S) 且 w  (Σ) 系统运行集合 = { r | r  M(S) } 系统标号集合 = { w | w  M(Σ) } {x=1,y=0} {x=1,y=1} a b c d s0 s1 s2 s3

离散系统运行模型(4) 系统运行(动作信息、接受条件) 系统运行离散模型 r  (S) 且 w  (Σ) 系统运行集合 = { r | r  M(S) (符合接受条件) } 系统标号集合 = { w | w  M(Σ) } {x=1,y=0} {x=1,y=1} a b c d s0 s1 s2 s3

混成系统运行模型 系统运行(离散部分、连续部分) 系统运行混成模型 设系统有k个实数变量 r : R  S Rk 系统运行集合 = { r | r  M } 0.1 0.2 0.1 a b c d s0 s1 s2 s3 {x=0.0,y=0.0} {x=1.0,y=0.1} {x=4.0,y=0.3}

实时系统运行模型 系统运行(离散部分、时钟变量) 系统运行实时模型 设系统有k个时钟变量 r : R  S Rk 运行的刻画可以简化为 r : N  S RRk 0.1 0.2 0.1 a b c d s0 s1 s2 s3 {x=0.0,y=0.0} {x=0.0,y=0.1} {x=0.0,y=0.3}

离散系统的表示 程序语言 状态迁移系统 -自动机 系统运行r  (S) 且 L: S  2AP {x=1,y=0} b c d s0 s1 s2 s3 系统运行r  (S) 且 L: S  2AP

运行集合的模型 (pc,x,y)=(s0,0,0) ------------------- (pc,x,y)=(s1,3,0) -------------------- (pc,x,y)=(s1,2,0) (pc,x,y)=(s2,2,1) (pc,x,y)=(s3,2,1) (pc,x,y)=(s4,2,2) (pc,x,y)=(s5,1,2) (pc,x,y)=(s6,1,2) (pc,x,y)=(s7,1,2) - (pc,x,y)=(s0,0,0) -------------------- . -

程序语言 s0: s1: s2: s3: s4: s5: s6: s7: x=n; y=1; while (x>1) { y=x*y; x=x-1; } z=y;

程序语言 系统运行 r  (S) 且 L: S  2AP 一般而言S和AP可以是无限集合 不存在一般的自动分析方法 {x=1,y=0}

状态迁移系统(状态、迁移) s000 s130 s231 s331 s431 s533 s120 s221 s321 s323 s412

状态迁移系统(状态、迁移、命题) s000 s130 s231 s331 s431 s533 {x=0,y=0} s120 s221

状态迁移系统 系统运行 r  (S) 且 L: S  2AP 要求S和AP是有穷集合 存在一般的自动分析方法 {x=1,y=0}

状态迁移系统/ -自动机 while (1) { x=getnum(); /* 4 > getnum() > 0 */ y=1; while (x>1) { y=x*y; x=x-1; } /* printnum(y); */

状态迁移系统/ -自动机 s000 s130 s231 s331 s431 s533 s120 s221 s321 s323 s412

状态迁移系统/ -自动机 while (1) { (a) x=getnum(); /* 4 > getnum() > 0 */ (b) y=1; (c) while (x>1) { (b) y=x*y; (d) x=x-1; } (e) /* printnum(y); */ }

-自动机(标号) a b c b d s000 s130 s231 s331 s433 s523 c a c b b s120 s221 e e s611 s612 s616 e Labels: a,b,c,d,e

-自动机(标号、接受状态) a b c b d s000 s130 s231 s331 s433 s523 c a c b b s120 e e s611 s612 s616 e Labels: a,b,c,d,e

-自动机 s0 取钱 1 2 s1 s2 取茶 1 2 1 2 2 s6 s3 s4 s7 1 找钱/取钱 出茶 退钱 s5

-自动机 s0 取钱 1 2 s1 s2 取茶 1 2 1 2 2 s6 s3 s6 s4 s7 1 找钱/取钱 出茶 退钱 s5

-自动机 系统运行 r  (S) w  (Σ) 要求S和Σ是有穷集合 存在一般的自动分析方法 {x=1,y=0} a b c d s0 s1 s2 s3

混成系统的表示 混成自动机(离散、连续) 系统运行 r : R  S Rk 0.1 0.2 0.1 a b c d s0 s1 s2 {x=0.0,y=0.0} {x=1.0,y=0.1} {x=4.0,y=0.3} 系统运行 r : R  S Rk

混成自动机 a,x<5,x:=0,y:=0 c,x=0.1,x:=0 d,x=0.2,x:=0 s000 s130 s231 s331 b,x=0.2,x:=0 b,x=0.4,x:=0 s523 a c,x=0.1,x:=0 c b b s120 s221 s321 s323 b,x=0.6,x:=0 s412 d b s426 d,x=0.2,x:=0 s110 s211 s512 c c s516 e c,x=0.1,x:=0 e s611 s612 s616 Variables: x(时间),y(累计),z(费用) e,x=0.1,x:=0,z:=0

混成自动机 a,x<5,x:=0,y:=0 c,x=0.1,x:=0 d,x=0.2,x:=0 s000 s130 s231 s331 b,x=0.2,x:=0 b,x=0.4,x:=0 s523 a c,x=0.1,x:=0 c b b x’=1 y’=1 z’=1 s120 s221 s321 s323 b,x=0.6,x:=0 s412 d b s426 d,x=0.2,x:=0 x’=1 y’=1 z’=2 s110 s211 s512 c c s516 e c,x=0.1,x:=0 e s611 s612 s616 Variables: x(时间),y(累计),z(费用) e,x=0.1,x:=0,z:=0

混成自动机 水箱 x>=5 x:=x+1 on off x'=1 x<=9 x'=-1 x<=2

混成自动机 表达能力(有点太强)

混成自动机(阶乘算法) z!=0  z=n! begin (x,y)=(n,1) 4>n>0,z=0 s1 x>1 (x,y)=(x-1,y*x) (z)=(y) end

混成自动机(阶乘算法) z!=0  z=n! begin (x,y)=(n,1) 4>n>0,z=0 s1 x>1 (x,y)=(x-1,y*x) (z)=(y) z=n! end

混成自动机(阶乘算法) begin x:=n,y:=1 s1 x>1,x:=x-1,y:=y*x (x>1),z:=y end

混成自动机(阶乘算法) x'=0 y'=0 z'=0 n'=0 begin x:=n,y:=1 x'=0 y'=0 z'=0 n'=0 s1 x>1,x:=x-1,y:=y*x (x>1),z:=y x'=0 y'=0 z'=0 n'=0 变量初始值: x=0 y=0 z=0 n=1n=2n=3 z=n! end

混成自动机 系统运行 表示能力强 不存在一般的自动分析方法 0.1 0.2 0.1 s0 s1 s2 s3 {x=0.0,y=0.0} x'=20sqrt(x) (x=100t2) y'=1.0

实时系统的表示 时间自动机(离散、时间) 系统运行 r : N  S RRk 0.1 0.2 0.1 a b c d s0 s1 s2 {x=0.0,y=0.0} {x=0.0,y=0.1} {x=0.0,y=0.3} 系统运行 r : N  S RRk

时间自动机 a,x<5,{x,y} c,x=0.1,{x} d,x=0.2,{x} s000 s130 s231 s331 s433 b,x=0.2,{x} b,x=0.4,{x} s523 a c,x=0.1,{x} c b b s120 s221 s321 s323 b,x=0.6,{x} s412 d b s426 d,x=0.2,{x} s110 s211 s512 c c s516 e c,x=0.1,{x} e s611 s612 s616 Clocks: x,y,z e,x=0.1,{x,z}

时间自动机 钥匙 open1 a,{x} a,x>1 a,x<=1 b b closed a b open5

时间自动机 s0 取钱 1 2 s1 s2 取茶 1 2 1 2 2 s6 s3 s6 s4 s7 1 找钱/取钱 出茶 退钱 s5

时间自动机 s0 取钱 1 2 s1 s2 取茶 1 2 1 2 2 s6 s3 s6 s4 s7 1 {x} 找钱/取钱 出茶 退钱 s5

时间自动机 系统运行 设系统有k个时钟变量 r : N  S RRk 存在一般的自动分析方法 0.1 0.2 0.1 s0 s1 s2 {x=0.0,y=0.0} {x=0.0,y=0.1} {x=0.0,y=0.3}

系统性质的表示方法 死锁 终止 安全性质 活性 时序性质

线性时序性质 线性时序逻辑

线性时序性质 F(z=n!) n>=0  F(z=n!) G(z!=0  z=n!) begin (x,y)=(n,1) z!=0  z=n! n>=0,z=0 s1 x>1 z=n! s2 s3 (x,y)=(x-1,y*x) (z)=(y) end F(z=n!) n>=0  F(z=n!) G(z!=0  z=n!) n>=0z=0  G(z!=0z=n!)

线性时序性质 0.1 1.2 时间线性时序逻辑 0.2 0.3 0.3

分枝时序性质 分枝时序逻辑

分枝时序逻辑 AF(z=n!) n>=0  F(z=n!) AG(z!=0  z=n!) begin (x,y)=(n,1) z!=0  z=n! n>=0,z=0 s1 x>1 z=n! s2 s3 (x,y)=(x-1,y*x) (z)=(y) end AF(z=n!) n>=0  F(z=n!) AG(z!=0  z=n!) n>=0z=0  AG(z!=0z=n!)

分枝时序逻辑 n>=0  EF(z=1) n>=0z=0  EG(z!=0z=1) z!=0  z=n! begin (x,y)=(n,1) z!=0  z=n! n>=0,z=0 s1 x>1 z=n! s2 s3 (x,y)=(x-1,y*x) (z)=(y) end n>=0  EF(z=1) n>=0z=0  EG(z!=0z=1)

分枝时序性质 0.1 1.2 时间分枝时序逻辑 0.2 0.3

验证方法 推理验证方法(计算机辅助): 自动验证方法: 基于推理规则 适用范围广 实用性受限于推理杂性和设计推理方案的难度 可能需要事先进行抽象处理以简化问题 证明失败不一定能说明什么问题 自动验证方法: 自动化 适用范围受限制 一般用于有限状态(数据简单控制复杂)的系统 最好事先进行抽象处理以简化问题 计算复杂性高、实用性受限于状态爆炸问题

课程主要内容 模型 语法、表示方法 语义、表示能力 逻辑 相关复杂性问题 验证 方法、算法、数据结构

预期目标 掌握并能够综合应用以下知识: 程序与 系统模型 验证方法 程序逻辑 基本原理 几类 简单的 几类 简单的 78

相关基础 逻辑、形式语言 集合、函数、图 算法、计算复杂性

参考文献

问题 ? 81