Scope Logic 工具研究进展

23
Scope Logic 工工工工工工 工工工 工工工工工工工工 2012.11.3 工工

description

Scope Logic 工具研究进展. 赵建华 南京大学计算机系 2012.11.3 苏州. 目录. Scope Logic 介绍 工具介绍 基本框架介绍 公式的分类 公式的状态 证明公式的基本方式 自动化 未来的工作. Scope Logic 介绍( 1 ). Scope Logic 介绍( 2 ). Scope Logic 介绍( 3 ). if(a>b) Assert i: {…..} a = a – b Assert j: {a = a@i - b} …. 工具的基本框架. 交互式证明工具,支持一定程度的自动化 - PowerPoint PPT Presentation

Transcript of Scope Logic 工具研究进展

Page 1: Scope Logic 工具研究进展

Scope Logic工具研究进展

赵建华南京大学计算机系2012.11.3 苏州

Page 2: Scope Logic 工具研究进展

目录• Scope Logic介绍• 工具介绍–基本框架介绍–公式的分类–公式的状态–证明公式的基本方式–自动化

• 未来的工作

Page 3: Scope Logic 工具研究进展

Scope Logic介绍( 1 )

Page 4: Scope Logic 工具研究进展

Scope Logic介绍( 2 )

Page 5: Scope Logic 工具研究进展

Scope Logic介绍( 3 )

if(a>b) Assert i: {…..} a = a – b Assert j: {a = a@i - b}…

if(a>b) Assert i: {…..} a = a – b Assert j: {a = a@i - b}…

Page 6: Scope Logic 工具研究进展

工具的基本框架• 交互式证明工具,支持一定程度的自动化• 使用 Proof In Code的方式证明程序–允许用户自定义函数,函数的内存范围函数、以及这些函数具有的性质(工具不保证这些函数的正确性)

–公式被写在不同的程序点上,–一个程序点上可以有多个公式–通过渐进的方式证明程序–使用 SMT Solver Z3进行程序点内部的公式推导

Page 7: Scope Logic 工具研究进展

工具的界面

Page 8: Scope Logic 工具研究进展

公式的分类• 强制公式–必须证明的公式,以防止零除、数组越界、空指针引用、…

–由工具在打开源程序时自动添加• 自生公式–必然成立的公式,包括 if/while语句的

conditions,赋值语句之后的等式等–部分由工具直接添加,部分由用户输入

• 用户输入的公式

Page 9: Scope Logic 工具研究进展
Page 10: Scope Logic 工具研究进展

公式的状态• 由工具或用户插入的公式有两种状态– 待证明:公式输入后尚未证明– 已证明:该公式已经可以由其它公式作为依据证明。

• 可以依赖于待证明的公式,所以已证明的公式未必成立• 如果它依赖的公式被删除 /修改,则该公式会重新变成待证明状态

• 在程序入口处的公式可以看作前置条件,不需要证明。

• 当一个程序中所有的公式都处于证明状态时,这些公式就都确定成立了

Page 11: Scope Logic 工具研究进展

公式的证明方式• 自生– 只要程序运行到程序点 i,该公式一定成立– 注:在赋值 /Alloc语句之后的自生公式证明略有变化

• 传播– 公式 p在程序点上成立是因为 p在其他程序点上成立

• @证明– p可以由同一程序点 i上的公式 p’加上一些@i而得到

• 推导– 一个公式可以由同一个程序点上的公式推导得到

Page 12: Scope Logic 工具研究进展

自生公式证明

Page 13: Scope Logic 工具研究进展

传播证明( if)• if语句– P 在 if语句之前成立,则在两个分支之前都成立– P在两个分支之后都成立,则在 if语句之后成立

• 操作:–在 if之前的公式 P被拷贝到两个分支之前

• 这两个公式已证明,且依赖于原来的 p

–在某分支之后的公式 P被拷贝到• 另外一个分支之后,待证明• if语句之后,已经证明,依赖于两个分支之后的 P

Page 14: Scope Logic 工具研究进展

传播证明( if)ASSERT0( a>0 && b>0; )while (a>0 && b>0) { ASSERT2( P : a>0 && b>0 ) if(a>b)

ASSERT3( )a = a – (b/a)*a;ASSERT4( )

elseASSERT5( )b = b – (a/b)*b;ASSERT6( )

ASSERT7( )} ASSERT7( )

a>0 && b>0 //依赖于 P@2)

a>0 && b>0 //依赖于 P@2

gcd(a,b)==gcd(a@0,b@0) //待证明 gcd(a,b)==gcd(a@0,b@0) //依赖于 P’@4 和 P’@6

P’ : gcd(a,b)==gcd(a@0,b@0)

Page 15: Scope Logic 工具研究进展

传播(while)• while语句– 如果 P 在 while语句之前、以及循环体之后成立,那么 P在循环体之后,以及循环之后都成立

– P实际上是循环不变式

• while语句之前的公式被复制到– 循环体之后,待证明– 循环体之前以及 while语句之后,依赖于语句之前的公式和语句之后的公式

• 仅当确认 P是循环不变式时才可以传播

Page 16: Scope Logic 工具研究进展

传播(while)ASSERT0( P : a>0 && b>0; )while (a>0 && b>0) { ASSERT2( ) if(a>b)

ASSERT3( )a = a – (b/a)*a;ASSERT4( )

elseASSERT5( )b = b – (a/b)*b;ASSERT6( )

ASSERT7( )} ASSERT7( )

P : a>=0 && b>=0 //依赖于 P@0 和 P@7

P : a>=0 && b>=0 //待证明

P : a>=0 && b>=0 //依赖于 P@0 和 P@7

Page 17: Scope Logic 工具研究进展

传播(复制 /alloc)

Page 18: Scope Logic 工具研究进展

传播(复制 /alloc)ASSERT0( a>0 && b>0; )while (a>0 && b>0) { ASSERT2( ) if(a>b)

ASSERT3( P : a@3>b; )a = a – (b/a)*a;ASSERT4( )

elseASSERT5( )b = b – (a/b)*b;ASSERT6( )

ASSERT7( )} ASSERT7( )

Q : &a!=&b //待证明

a@3>b //已经证明,依赖于 P@3 , Q@3

Page 19: Scope Logic 工具研究进展

@ 证明• 自动判断p 能否由同 assert中某公式加 @i而得到

ASSERT0( a>0 && b>0; )while (a>0 && b>0) { ASSERT2( ) if(a>b)

ASSERT3( P : a>b; )a = a – (b/a)*a;ASSERT4( )

elseASSERT5( )b = b – (a/b)*b;ASSERT6( )

ASSERT7( )} ASSERT7( )

Q : a@3>b //依赖于 P

Page 20: Scope Logic 工具研究进展

推导• 只在同程序点上的公式之间进行• 使用 SMT Solver Z3完成

Page 21: Scope Logic 工具研究进展

辅助的自动化功能• @ 证明方式• 简单的涉及取地址运算的公式证明和简化• 基本块内部的证明–在受限条件下,能够在基本块入口处生成公式的前置条件

• 数据流分析–整数变量的取值范围–空指针分析–单链表分析

Page 22: Scope Logic 工具研究进展

将来的工作• 完成常见递归数据结构的递归函数和性质的定义–单链表,双向链表,二叉树

• 开放数据流分析的接口,增加更多数据流分析功能

• 基于模式的自动证明方式• 支持局部推导和过程调用

Page 23: Scope Logic 工具研究进展

谢谢