形状图逻辑和形状系统 中国科学技术大学 报告人 陈意云

Slides:



Advertisements
Similar presentations
第五节 函数的微分 一、微分的定义 二、微分的几何意义 三、基本初等函数的微分公式与微分运算 法则 四、微分形式不变性 五、微分在近似计算中的应用 六、小结.
Advertisements

2.5 函数的微分 一、问题的提出 二、微分的定义 三、可微的条件 四、微分的几何意义 五、微分的求法 六、小结.
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
第7章 樹與二元樹 (Trees and Binary Trees)
Tool Command Language --11级ACM班 金天行.
第三章 鏈結串列 Linked List.
第5章 定积分及其应用 基本要求 5.1 定积分的概念与性质 5.2 微积分基本公式 5.3 定积分的换元积分法与分部积分法
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
§5 微分及其应用 一、微分的概念 实例:正方形金属薄片受热后面积的改变量..
程序的形式验证 - 简介 中国科学院软件研究所 张文辉 1.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
Linked List Operations
其他类型的链表主要内容 静态链表 循环链表 双向链表.
Hadoop I/O By ShiChaojie.
ACD/ChemSketch软件在有机化学教学中的简单应用
EBNF 请用扩展的 BNF 描述 C语言里语句的结构; 请用扩展的 BNF 描述 C++语言里类声明的结构;
面向对象建模技术 软件工程系 林 琳.
强连通分量 无向图 1、任意两顶点连通称该图为连通图 2、否则将其中的极大连通子图称为连通分量 A D C B E 有向图
第12章 樹狀搜尋結構 (Search Trees)
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
第二章 Java语言基础.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
绿色圃中小学教育网 比例 比例的意义 绿色圃中小学教育网
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
程序设计工具实习 Software Program Tool
SOA – Experiment 2: Query Classification Web Service
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
C# 入门 2011级ACM班 张方魁.
顺序表的删除.
VisComposer 2019/4/17.
第二章 Java基本语法 讲师:复凡.
第7章 樹與二元樹(Trees and Binary Trees)
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
实体描述呈现方法的研究 实验评估 2019/5/1.
程序验证工具的研究 中国科学技术大学 陈意云
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
成绩是怎么算出来的? 16级第一学期半期考试成绩 班级 姓名 语文 数学 英语 政治 历史 地理 物理 化学 生物 总分 1 张三1 115
信号量(Semaphore).
第4章 Excel电子表格制作软件 4.4 函数(一).
定理21.9(可满足性定理)设A是P(Y)的协调子集,则存在P(Y)的解释域U和项解释,使得赋值函数v(A){1}。
第九节 赋值运算符和赋值表达式.
1.设A和B是集合,证明:A=B当且仅当A∩B=A∪B
树和图 tree and graph 蔡亚星.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
第一部分:概率 产生随机样本:对分布采样 均匀分布 其他分布 伪随机数 很多统计软件包中都有此工具 如在Matlab中:rand
2019/5/21 实验一 离散傅立叶变换的性质及应用 实验报告上传到“作业提交”。 11:21:44.
本节内容 指针类型的使用 视频提供:昆山爱达人信息技术有限公司.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第十七讲 密码执行(1).
插入排序的正确性证明 以及各种改进方法.
任课教师:戴开宇 TA:时均帅、谭肖、王安华 程序设计B班 :20-16:50(90分钟)
第二次课后作业答案 函数式编程和逻辑式编程
§2 自由代数 定义19.7:设X是集合,G是一个T-代数,为X到G的函数,若对每个T-代数A和X到A的函数,都存在唯一的G到A的同态映射,使得=,则称G(更严格的说是(G,))是生成集X上的自由T-代数。X中的元素称为生成元。 A变, 变 变, 也变 对给定的 和A,是唯一的.
Presentation transcript:

形状图逻辑和形状系统 中国科学技术大学 报告人 陈意云 0551-3607043,yiyun@ustc.edu.cn 报告人 陈意云 0551-3607043,yiyun@ustc.edu.cn http://staff.ustc.edu.cn/~yiyun 1

报 告 提 纲 形状图逻辑 形状系统 循环不变形状图的推断 复杂易变数据结构的解决方案 形状图,形状图的变换规则,形状图的语义,形状图逻辑 报 告 提 纲 形状图逻辑 形状图,形状图的变换规则,形状图的语义,形状图逻辑 形状系统 形状定义、形状推断、形状检查 循环不变形状图的推断 复杂易变数据结构的解决方案

形状图逻辑 形状图 描述静态声明的指针和动态分配的结构体中域指针的指向的一种有向图 能准确地表达指针之间的相等关系 直接作为指针断言 NULL指针 h  nxt . . . m个节点, m>=0 p1 p n个节点, n>=0 一个直观的单链表示意图

形状图逻辑 形状图:语法 描述静态声明的指针和动态分配的结构体中域指针的指向的一种有向图 能准确地表达指针之间的相等关系 直接作为指针断言 NULL指针 h  nxt . . . m个节点, m>=0 p1 p n个节点, n>=0 一个直观的单链表示意图 h nxt p1 p  m, m>=0 n, n>=0 用形状图浓缩表示为

形状图逻辑 形状图:语法 一个双向链表示意图 用形状图浓缩表示为 h  r . . . m -1, m>=0 l h  r 除了r和l外,没有 其他边指向双向 链表的浓缩节点

形状图逻辑 数据结构可以用形状图来定义(例举) c_list(h) c_list(h, e, a) 二叉树tree(h) 循环单链表  r l h  P  tree 二叉树tree(h) 该指针满足 一个谓词  h  P  c_list nxt 循环单链表 c_list(h) 被浓缩的节点数是n, n  0 h  P c_dlist, e, a r e-1, a l (a (e>=1)) 双向循环链表 c_list(h, e, a) (一种情况) 6

不确定的双向链表浓缩节点的展开与折叠规则 形状图逻辑 pk表示可能 还有的其他边 形状图:等价变换规则(例举) 双向链表浓缩节点的展开与折叠规则 (点划线框称为窗口W) ( a (e>=1) ) r l e, a  e-1, a 不确定的双向链表浓缩节点的展开与折叠规则   r l pk

形状图逻辑 等价变换规则的应用 窗口以外部 分称为上下文 对a (n-1>0)形状图 应用规则 上下文不变 得到形状图 r n-1, a l h 应用规则 ( a (e>=1) ) r l e, a  e-1, a 上下文不变 得到形状图 r n-2, a l h

形状图逻辑 形状图:蕴涵变换规则(例举) 从等价变换规则W  W1W2,可得 W1  W 和 W2  W 从 可得 从 可得 ((e1==e2a1)a2)((e2==e1a2)a1) r l e1, a1  e2, a2 从 可得  ((e1==e2  a1)  a2) 从 可得  nt p1 e, a pk e-1, a  a  (e >=1) 9

形状图逻辑 形状图:从等价变换系统到重写系统 代数规范 形状图 各种数据结构有浓缩节点和谓词节点的展开和折叠等规则,循环不变形状图推断时需要使用 可以像研究代数规范那样来研究形状图 代数规范 形状图 1. 基于基调定义代数项集 类似地可定义形状图集 2. 代数项之间的等式 形状图的等价变换规则 3. 代数项重写系统 形状图重写系统 4. 终止性和合流性 终止性和合流性 我们系统所使用的形状图重写系统是终止和合流的

形状图逻辑 形状图:语义 形状图是抽象机器状态集的图形表示(只包括指针数据存储单元) 展开后得到: 是一个机器状态集的图形表示 h nxt p1 p  m, m>=0 n, n>=0 展开后得到: h  nxt . . . m个节点, m>=0 p1 p n个节点, n>=0 是一个机器状态集的图形表示

形状图逻辑 形状图:语义 形状图是抽象机器状态集的图形表示(只包括指针数据存储单元) 形状图是程序状态中指针相等断言的图形表示 p1->nxt == p p(->nxt)n == NULL 形状图可以作为程序断言,形状图之间符号和就是逻辑合取和析取连接词 形状图的等价变换规则就是形状图断言的等价演算规则 h nxt p1 p  m, m>=0 n, n>=0

形状图逻辑 形状图:断言和符号断言的演算规则(例举) 应用该规则 来源于程序中的条 件语句或循环语句 uk表示可能 还有的其他边  u !=NULL u nxt uk  注:u和uk处于边的下方,表示访问路径 应用该规则  p1->nxt !=NULL  h nxt p1 p  h nxt p1 p 

形状图逻辑 形状图逻辑 一种程序逻辑,使得Hoare逻辑扩展到能用于带指针类型的语言 先考虑指针语句的推理规则,它们用于程序的形状分析 推理规则描述语句S前程序点的形状图中,窗口W1怎样变化到W2, W1的上下文G[ ]保持不变 即规则体现:{ G[W1] } S { G[W2] } 也可能涉及两个窗口 { G[W11, W12] } S { G[W21 , W22] }

形状图逻辑 形状分析时所用的指针语句的推理规则例举 指针赋值 u = v 的推理规则之一 分配空间语句 u = malloc(t) 的推理规则之一 u = v v nt vk  u Dangling指针 u = malloc(t) u D 结构类型t只有一个域指针f f

形状图逻辑 形状图逻辑中指针语句推理规则的可靠性 在有栈和堆的机器模型上 形状图是程序状态集的图形表示,也是指针断言集的图形表示,形状图的变换规则就是有效的断言演算规则 指针语句的推理规则就是相应语句操作语义的图形表示 指针语句的推理规则对操作语义可靠 u = malloc(t) u D f

形状图逻辑 程序验证时所用的指针语句的推理规则例举 非指针语句( Q表示符号断言) 赋值语句x = e 使用Hoare逻辑的赋值公理,它不影响G {GQ[e/x]} x = e {GQ} 其他语句(如不涉及指针的函数调用) 也采用Hoare逻辑的规则,它也不影响G

形状图逻辑 程序验证时所用的指针语句的推理规则例举 指针语句 指针赋值语句u = v 本质上不改变Q,根据形状图对Q进行别名代换 前提在形状 分析时得到 程序验证时所用的指针语句的推理规则例举 指针语句 指针赋值语句u = v 本质上不改变Q,根据形状图对Q进行别名代换 Q[u/u]表示Q中u及其别名都用与之相等但不是别名的访问路径u代换 {G} u = v {G} {G  Q} u = v {G  Q[u/u]} h nxt p1 p  m, m>=0 n, n>=0 若对p1赋值,若Q 中有p1->data,则用 h(->nxt)m->data来代换

报 告 提 纲 形状图逻辑 形状系统 循环不变形状图的推断 复杂易变数据结构的解决方案 形状图,形状图的变换规则,形状图的语义,形状图逻辑 报 告 提 纲 形状图逻辑 形状图,形状图的变换规则,形状图的语义,形状图逻辑 形状系统 形状定义、形状推断、形状检查 循环不变形状图的推断 复杂易变数据结构的解决方案 19

形状图逻辑 完整的形状图逻辑的可靠性 在指针语句推理规则对操作语义可靠的基础上,还需证明 对语句和断言消除别名保持它们原来的语义或含义 在没有别名时, Hoare逻辑的赋值公理的使用是可靠的 . . . . . .

形 状 系 统 设计形状系统的目的 形状系统包括 抬高合法程序的门槛,降低形状分析和程序验证的难度 形 状 系 统 设计形状系统的目的 抬高合法程序的门槛,降低形状分析和程序验证的难度 利用形状系统排除没有构造出(或操作于)程序员所声明形状的程序 形状系统包括 所允许的各种形状及其定义 形状推断规则 形状检查规则 形状系统的设计和实现基于形状图逻辑 21

形 状 系 统 形状推断 形状检查 形状检查的程序点 推断声明指针所在形状子图属于哪种形状 对形状子图进行折叠化简,判断其属于哪种形状 形 状 系 统 形状推断 推断声明指针所在形状子图属于哪种形状 对形状子图进行折叠化简,判断其属于哪种形状 形状检查 检查上述形状推断的结果与相关结构体类型的形状声明是否一致 形状检查的程序点 函数的调用点和返回点 循环语句的入口点和循环体的结束点 程序员指定的其他程序点,帮助发现程序错误 22

形 状 系 统 用例:降低循环不变形状图推断的难度 双向链表 循环迭代依次把域指针l都赋值为NULL 形 状 系 统 用例:降低循环不变形状图推断的难度 双向链表 h  r . . . l 循环迭代依次把域指针l都赋值为NULL h  r . . . l 形状系统拒绝这样的程序,因为它偏离了声明的形状 23

形 状 系 统 形状系统和类型系统的比较 看似相似但有本质区别 类型系统:给出对静态程序文本的上下文有关的约束,不涉及语言的操作语义 形 状 系 统 形状系统和类型系统的比较 看似相似但有本质区别 类型系统:给出对静态程序文本的上下文有关的约束,不涉及语言的操作语义 形状系统:给出对程序动态地构造的数据结构的形状限制,它依赖于语言的操作语义 类型系统:定型规则是结构化的(根据语言构造的各子构造的类型来确定该语言构造的类型) 形状系统:形状推断和形状检查是根据各节点的连接方式来推断所构成的形状以及它是否被认可 24

报 告 提 纲 形状图逻辑 形状系统 循环不变形状图的推断 复杂易变数据结构的解决方案 形状图,形状图的变换规则,形状图的语义,形状图逻辑 报 告 提 纲 形状图逻辑 形状图,形状图的变换规则,形状图的语义,形状图逻辑 形状系统 形状定义、形状推断、形状检查 循环不变形状图的推断 复杂易变数据结构的解决方案 25

循环不变形状图的推断 用例子来解释 例子:有序单链表的节点插入函数 1、节点类型声明 程序员声明各种递归结构体类型参与构建的易变 typedef struct listnode { Node *: LIST next; int data; } Node; 程序员声明各种递归结构体类型参与构建的易变 数据结构的形状

循环不变形状图的推断 2、函数代码 Node* insert( Node* head, int data) { Node * ptr, * ptr1, * ret, * p; int j; p = malloc(Node*); p->data = data; p->next = NULL; if (head == NULL) { /* 空表情况 */ } else if (p->data <= head->data) { /* 作为第一个节点*/ } else {/* 插在表中或表尾*/ ptr1 = head; ptr = head->next; j = 1; while( (ptr != NULL) && ( ptr->data < p->data ) ) { ptr1 = ptr; ptr = ptr -> next; j = j+1; } … … /* 以下略去*/ 27

循环不变形状图的推断 3、程序员提供函数前后条件和循环不变式 length(head, next) == m  /* 前条件 */ i:1..m-1.(head(->next)i-1->data <= head(->next)i->data) Node* insert( Node* head, int m, int data) { … … if (head == NULL) { … … } else if (p->data <= head->data) { … … } else { ptr1 = head; ptr = head->next; j = 1; while( (ptr != NULL) && ( ptr->data < p->data ) ) { ptr1 = ptr; ptr = ptr -> next; j = j+1; } length(head, next) == m + 1  /* 后条件 */ 28

循环不变形状图的推断 循环不变式,分成搜索到表中和表尾两种情况: … … ptr1 = head; ptr = head->next; j = 1; while( (ptr != NULL) && ( ptr->data < p->data ) ) { ptr1 = ptr; ptr = ptr -> next; j = j+1; } 循环不变式,分成搜索到表中和表尾两种情况: (ptr != NULL  ptr1->data < p->data  j >= 1  i:1..j-1.(head(->next)i-1->data <= head(->next)i->data)  ptr1->data <= ptr->data  i:1..m-j-1.(ptr(->next)i-1->data <= ptr(->next)i->data) )  (ptr == NULL  ptr1->data < p->data  j >= 1  i:1..j-1.(head(->next)i-1->data <=head(->next)i->data) ) 所提供断言无需包括涉及形状的断言 29

循环不变形状图的推断 函数入口点和循环前程序点的形状图 Node* insert( Node* head, int m, int data) { … … if (head == NULL) { … … } else if (p->data <= head->data) { … … } else { ptr1 = head; ptr = head->next; j = 1; while( (ptr != NULL) && ( ptr->data < p->data ) ) { ptr1 = ptr; ptr = ptr -> next; j = j+1; } head next  m, m>=0 m-1, m-1>=0 head next  ptr1 ptr p  函数入口点和循环前程序点的形状图 30

循环不变形状图的推断 4、循环不变形状图 while( (ptr != NULL) && ( ptr->data < p->data ) ) { ptr1 = ptr; ptr = ptr -> next; j = j+1; } j-1, j-1>=0 m-j, m-j>=0 head next ptr1 ptr  p  31

循环不变形状图的推断 循环不变形状图推断的算法框架 对于循环:while (B) S (1)计算循环前条件G0 = Gpre。i = 0 (2)根据形状图逻辑的规则计算Gi , 使得{Gi  B} S {Gi+1 } (3)应用抽象规则计算Gi+1,使得 Gi+1 Gi+1 (4)若Gi+1  G0…Gi,则G0…Gi是循环不变形状图;否则,i = i + 1,转(2) 32

循环不变形状图的推断 保证算法终止的措施一:使用虚拟变量 对于“应用抽象规则计算Gi+1,使得 Gi+1 Gi+1 循环的特点:遍历或生成的节点应该能浓缩 保证能抽象的措施:为循环体的每条执行路径都设有累计该路径执行次数的虚拟变量,先用虚拟变量进行抽象 目前系统的不足:尚未用程序分析技术去寻找含声明变量的线性表达式,以代替虚拟变量 p n   h m-j, m-j>=0 p1 p2 j-1, j-1>=0 33

循环不变形状图的推断 保证算法终止的措施二:形状检查 双向链表 循环迭代依次把域指针l都赋值为NULL h  r . . . l 循环迭代依次把域指针l都赋值为NULL h  r . . . l 形状系统拒绝这样的程序,因为它偏离了声明的形状 34

循环不变形状图的推断 保证算法终止的措施三:限制整型表达式 将程序员提供的与形状有关的整型表达式限制到线性表达式 在形状分析中产生的也是线性表达式 p n   h m-j, m-j>=0 p1 p2 j-1, j-1>=0 35

循环不变形状图的推断 算法终止的理由 声明指针的个数有限 相邻2个声明指针所指向节点之间的节点数有限 (不超过3个) 在循环体结束点能形成的不等价形状图有限 P p l r q s tree 36

报 告 提 纲 形状图逻辑 形状系统 循环不变形状图的推断 复杂易变数据结构的解决方案 形状图,形状图的变换规则,形状图的语义,形状图逻辑 报 告 提 纲 形状图逻辑 形状图,形状图的变换规则,形状图的语义,形状图逻辑 形状系统 形状定义、形状推断、形状检查 循环不变形状图的推断 复杂易变数据结构的解决方案 37

复杂易变数据结构的解决方案 数据结构的嵌套 例:双向链表的每个节点都有一个单链表 解决办法: 1、程序员声明域指针的不同作用 h  r . . . l s next  解决办法: 1、程序员声明域指针的不同作用 2、限定这些单链表都是表长不确定的单链表 38

复杂易变数据结构的解决方案 有附加单链表的数据结构 例:用附加单链表把数据结构上的部分节点链起来 困难之处:附加单链指针的指向不能静态确定 h  r . . . l a s 困难之处:附加单链指针的指向不能静态确定 解决办法: 1、将附加单链从主链上剥离,建一个虚拟单链表 39

复杂易变数据结构的解决方案 有附加单链表的数据结构 例:用附件单链表把数据结构上的部分节点链起来 困难之处:附加单链指针的指向不能静态确定 h  r . . . l s a 困难之处:附加单链指针的指向不能静态确定 解决办法: 1、将附加单链从主链上剥离,建一个虚拟单链表 2、程序员声明附加链指针,增加一些编程约束 40

复杂易变数据结构的解决方案 有确定的附加指针的数据结构 例如:队列,带父节点指针的二叉树,left-child right-sibling tree with two kinds of backward links 解决办法: 1、已经定义的5种数据结构作为骨架 2、程序员描述附加指针与骨架上指针之间的关系 3、骨架形状的正确性由形状系统完成 4、从(2)的描述产生附加指针的检查代码

复杂易变数据结构的解决方案 例:带父节点指针的二叉树 描述父节点指针和 骨架二叉树的指针之间的关系 s  p_tree(s)  s == NULL  s != NULL  s->parent == NULL  ptree(s) ptree(s)  (s->left != NULL  s->left->parent == s  ptree(s->left))  (s->right!=NULL  s->right->parent==s ptree(s->right)) … …. …. …. s  42

作 业 1、模仿二叉排序树的归纳定义,给出二叉平衡树(见严蔚敏等,数据结构(C语言版)》,清华大学出版社)的归纳定义。 作 业 1、模仿二叉排序树的归纳定义,给出二叉平衡树(见严蔚敏等,数据结构(C语言版)》,清华大学出版社)的归纳定义。 2、除了课堂上已经提到的外,你认为C语言还有哪些数据类型、语言构造和其它语言特征是不利于程序验证的,简述你的理由。 作业提交:发邮件至:yiyun@ustc.edu.cn 截止时间:7月22日24点 43

小 结 从下面几个角度尝试程序验证工具的研发 特色之处 用程序分析所得信息来支持程序验证 降低程序员使用难度 降低自动定理证明器的难度 小 结 从下面几个角度尝试程序验证工具的研发 用程序分析所得信息来支持程序验证 降低程序员使用难度 降低自动定理证明器的难度 特色之处 设计了一种形状图逻辑,优点: 1、直观 2、易于把握全局的指针信息 3、在程序分析的实现中,推理比较简单 4、对自动定理证明有较好的支持 44

谢 谢 !