[发明专利]一种基于可满足性求解的同步语言程序自动验证方法有效
申请号: | 202011103235.5 | 申请日: | 2020-10-15 |
公开(公告)号: | CN112269734B | 公开(公告)日: | 2022-04-26 |
发明(设计)人: | 陈哲;孙毅;冉丹 | 申请(专利权)人: | 南京航空航天大学 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 南京经纬专利商标代理有限公司 32200 | 代理人: | 施昊 |
地址: | 210016 江*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 基于 满足 求解 同步 语言 程序 自动 验证 方法 | ||
本发明公开了一种基于可满足性求解的同步语言程序自动验证方法,包括将同步语言程序中的枚举值、用户自定义类型和常量内联到同步语言程序的节点里,在同步语言程序的主节点中递归地内联所有被调用的节点,得到一个包含单一节点的同步语言程序,然后通过引入新的局部数据流将程序的内存深度降为1,最后将包含单一节点的同步语言程序及其安全属性表示为命题逻辑公式,并利用可满足性模理论求解器验证同步语言程序是否满足待验证的安全属性。本发明支持直接验证大规模复杂同步语言程序,能够提高验证能力和效率、保证程序的可靠性和安全性。
技术领域
本发明涉及计算机软件领域,尤其涉及一种基于可满足性求解的同步语言程序自动验证方法。
背景技术
航空、航天、核能、交通等安全关键领域的嵌入式系统软件大都使用同步数据流语言(简称同步语言)开发实现,比如SCADE,Esterel,Lustre和Signal等语言。同步语言是一种声明式语言,其基本的数据抽象是数据流。一个同步语言程序由一个或多个节点构成,类似于C/C++中的函数。每个节点具有零个或更多的输入数据流和局部数据流、以及一个或更多的输出数据流。数据流就是一个值的序列,而且同步语言只支持布尔型、整型和实数型数据流。数据流通常用序列(x1,x2,x3,...)表示,括号内的x1,x2,x3分别表示这个数据流在第1、2、3个时钟上的值。在同步语言程序中,任何变量和表达式都表示一个由多个时钟上的值所构成的数据流,例如变量x表示数据流(x1,x2,x3,...)。
同步语言中常用的操作符包括:算术符(+,-,*,/,div,mod)、布尔操作符(and,or,not)、关系操作符(,=,,=)、条件符(if-then-else)和时序操作符,其中,时序操作符主要包括如下几种:
(1)pre(X)表示用表达式X在前一个时钟上的值构成一个新的数据流。例如,如果整型变量X的值序列为X=(x1,x2,x3,...,xn,...),那么pre(X)的值序列为pre(X)=(nil,x1,x2,...,xn-1,...),其中nil表示空值。
(2)X-Y表示用表达式X和Y构成一个新的数据流,该数据流在第1个时钟上的值与X相同,在其余时钟上的值与Y相同。例如,如果X=(x1,x2,x3,...,xn,...)和Y=(y1,y2,y3,...,yn,...)是具有相同类型和相同时钟的两个表达式,那么X-Y是与X和Y具有相同类型和相同时钟的表达式,且X-Y=(x1,y2,y3,...,yn,...)。也就是说,除了第一个时钟,X-Y总是等于Y。在SCADE等同步语言中还有一个类似的操作符fby,fby(Y,n,X)是与X和Y具有相同类型和相同时钟的表达式,其中n是一个静态整数,且fby(Y,n,X)=X-pre(X-pre(...pre(X-pre(Y))...))。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于南京航空航天大学,未经南京航空航天大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011103235.5/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种锂电池保护板
- 下一篇:一种建筑外墙保温装饰板制作加工系统