基于惰性切片的线性时态逻辑性质验证
黄宏涛1, 王静2, 叶海智1, 黄少滨3
1.河南师范大学 河南省教育信息工程技术研究中心,河南 新乡 453007
2.中国石化管道储运公司 新乡输油处信息中心,河南 新乡 453007
3. 哈尔滨工程大学 计算机科学与技术学院,哈尔滨 150001

作者简介:黄宏涛(1980-),男,副教授,博士.研究方向:模型检测.E-mail:huanghongtao@outlook.com

摘要

惰性切片是一种有效的状态空间缩减方法,但是它无法直接判定一个模型是否满足所期望的线性时间性质。针对该问题,提出了一种基于惰性切片的线性时态逻辑公式验证方法。该方法首先构造给定线性时态逻辑公式的否定Büchi自动机与系统模型的乘积自动机,然后使用惰性切片算法在该乘积自动机上以惰性方式搜索可接受迹,从而把线性时间性质验证问题转换为通过可达性分析搜索可接受状态的不变性检测过程。实验结果证明,基于惰性切片的线性时态逻辑公式验证算法在不损失验证结果正确性的前提下使惰性切片算法具备了验证线性时间性质的能力,同时也有效提高了LTL模型检测方法的可扩展性。

关键词: 计算机软件; 模型检测; 惰性切片; 线性时态逻辑; Büchi自动机; 乘积自动机
中图分类号:TP311.5 文献标志码:A 文章编号:1671-5497(2015)01-0245-07
Lazy slicing based method for verifying linear temporal logic property
HUANG Hong-tao1, WANG Jing2, YE Hai-zhi1, HUANG Shao-bin3
1.Engineering Research Center for Education Information, Henan Normal University, Xinxiang 453007, China
2.Information Center of Xinxiang Oil Transportation Department, Sinopec Pipeline Storage&Transportation Company, Xinxiang 453007, China
3.College of Computer Science and Technology, Harbin Engineering University, Harbin 150001, China
Abstract

Lazy slicing is an effective state-space reduction method, but it can not directly determine whether a model satisfies the expected linear property. A lazy slicing based method is proposed to solve this problem. First, it constructs a negation Büchi automaton for given linear temporal logic formula and a product automaton of the system model. Then it searches for an acceptable trace on this product automaton lazily. Thus, the problem of verifying a linear time property is converted into the problem of invariance validation, which makes it possible to search the acceptable state by reachability analysis. Experiment results show that this lazy slicing based algorithm not only makes lazy slicing be able to verify linear time property, but also remarkably improves the scalability of LTL model checking.

Keyword: computer software; model checking; lazy slicing; linear temporal logic; Büchi automata; product automata
引言

状态空间爆炸问题是使用模型检测技术验证软件系统正确性面临的主要挑战之一。程序切片[1]是一种缓解状态空间爆炸问题的有效方法, 在软件模型检测技术中有着成功地应用[2, 3, 4, 5, 6]。然而, 传统的静态程序切片技术不能保证总是获得状态空间得到有效缩减的切片模型, 原因是使用静态切片方法获得的切片模型的规模除了受切片标准影响外, 还取决于系统中变量间的依赖程度。变量间的相互依赖程度越高, 静态切片方法对状态空间的压缩能力就越差。

为了解决这个问题, 研究人员在静态切片方法中引入了反例引导的抽象细化[7](Counter example guided abstract refinement, CEGAR)技术。增量式切片技术[8]和逐步回归式切片技术[9]就是这类方法的典型代表。但是这类方法在每次细化迭代过程中都要以更高的精度对全部状态空间进行搜索, 这会导致在细化前已经验证过的部分状态空间上的重复计算。文献[10]和文献[11]提出的惰性切片方法使用懒惰抽象[12]思想对基于CEGAR的切片方法进行了优化。它们能够在发现伪反例时仅细化和验证未被处理的部分切片模型, 从而消除了基于CEGAR的切片方法中的重复计算, 提高了对状态空间的压缩能力和能够验证的系统规模。

惰性切片本质上是在过近似切片上通过可达性分析搜索错误状态的过程, 这使其能够验证的性质类型局限于命题逻辑公式描述的不变性性质。从而导致惰性切片算法无法直接判定给定系统是否是某个LTL公式表达的线性时间性质, 原因是线性时态逻辑(Linear temporal logic, LTL)公式中还包含一些涉及时态的特殊算子, 如下一步“ X” 和直到“ U” 算子。为了使惰性切片能够对表达能力更强的LTL公式进行验证, 本文提出一种基于惰性切片的LTL性质验证方法。其基本思想为:构造所期望LTL性质的否定Bü chi自动机, 计算该自动机与给定模型的乘积自动机; 然后在乘积自动机上展开惰性搜索, 从而把LTL模型检测问题转换为通过可达性分析搜索可接受状态的不变性检测过程, 搜索的结果可直接转换为LTL模型检测的结果。

1 相关定义

本文使用文献[11]和[13]中的方法给出程序等相关定义:令 为程序变量集, 分别为 的数据域; 为程序事件集, 事件 是定义在 上的一个条件指派:

式中: 为守护条件, 它是定义在 上的逻辑表达式,

式(1)中箭头右边为一组指派表达式, 其中 个指派表达式, 表示把 的估值指派给 , 为指派的目标变量, 指派表达式集合构成事件的指派动作。为了表述方便, 本文使用 表示 的指派目标变量; 表示 的守护条件, 表示 的指派动作; 表示构成 的指派表达式集合。

定义1 Kripke模型是一个五元组 , 其中 是状态集合; 是迁移集合; 是初始状态集合; 是原子命题集合; 是标签转换函数。

其中 分别为 的初始赋值, 且有

定义2 状态序列 是Kripke模型 上的一条路径(当且仅当对任意 存在 使得 其中

定义3 令 为Kripke模型 上的一条路径, 称构成 的状态序列对应的标签序列 的迹, 表示为 上的所有迹是定义在字母表 上的语句集合, 表示为

给定系统模型 和所期望的LTL性质φ LTL, 为了使惰性切片算法能够判定 是否满足φ LTL, 需要构造􀱑φ LTL的非确定性Bü chi自动机。

定义4 非确定性Bü chi自动机(Nondetermistic Bü chi automata, NBA)是一个五元组 其中 为一个有限状态集合; 是字母表; 为迁移函数; 为初始状态集合; 为可接受状态集合。

表示一个非确定性Bü chi自动机, 则有如下定义。

定义5 上的一次运行, 当且仅当存在一个无限状态序列 使得 其中 如果有 则称 是可接受的。

定义6 如果 上存在和 对应的运行, 则称 接受, 其中 为一个有限长度的文字, 设 表示 的可接受语言, 则 中所有被 接受的文字集合, 即

2 基于惰性切片的LTL性质验证
2.1 构造乘积自动机

使用惰性切片算法验证LTL性质的核心步骤是把Kripke模型上的LTL性质验证问题转换为 上的不变性验证过程, 也即通过可达性分析对 进行穷尽搜索的过程。其中 对应的NBA, 的乘积自动机。

定义7 令 为给定系统的Kripke模型, 为所期望的LTL性质 对应的否定NBA, 且有 的乘积可定义为:

式中: 是由规则 确定的迁移集合, 其中 属于构成 的程序事件集; 为初始状态集合; 并且

注意到 的原子命题集合中的元素构成, 令:

上的一条路径, 则有

上的路径, 且

上的一个运行, 且有

接受。

构造出 后, 就可以通过判断 是否为空来确定 的模型, 也即判断 上是否存在可被 接受状态的过程。这样就把LTL性质验证问题转换为不变性检测问题, 也即通过可达性分析在 上搜索 可接受文字的过程。令命题逻辑公式

表示 可接受状态集合, 同时这个公式也是不变性检测过程中所要验证的不变性性质, 记为 于是LTL性质验证问题最终被归约为 是否是 的模型这一不变性检测过程。这为应用惰性切片算法验证 创造了充分条件。

2.2 计算过近似切片

应用惰性切片算法对 进行搜索的前提是构建 的过近似切片(Overapproximate slice), 而构建过近似切片的关键步骤是确定切片标准。

定义8 的一个切片标准是一个二元组 表示所有出现在 中的命题变量集合。

的过近似切片模型。由于相对 的状态空间规模很小, 所以 决定。为了减小计算 的过近似切片的代价, 实际应用中不直接计算 而是首先通过移除 的过近似切片 然后由 导出 的计算共有如下3个步骤。

步骤1 计算 的变量集 其不动点迭代计算公式如下:

当在迭代计算过程中第一次出现 时, 说明由 计算得到 相对于 不再变化, 此时有

步骤2 计算 的事件集合

步骤3 根据 计算 的初始状态集 式(4)给出了 的定义。

式中: 表示 下的投影状态。

步骤1~3从 的过近似切片标准 出发, 分别给出了变量集合 事件集合 及初始状态集合 的计算方法, 根据定义1知, 可直接由 诱导, 且 于是可通过步骤4和步骤5计算

步骤4 构造 的初始状态集

步骤5 根据 计算 的状态集 和迁移集 下面给出 的递归定义。

定义9 中的元素满足如下条件:

(1)

(2)对任意 如果存在 使得式(6)所示规则成立, 则有

(3)有限次使用条件(1)和(2)直到 中的元素不再发生变化, 此时的 即为 的状态集合和迁移集合。

可由定义7直接计算。 关于切片标准 的一个过近似切片。惰性切片算法可以在 上通过惰性搜索寻找标签被 接受的状态。如果惰性搜索算法找到标签被 接受的状态, 说明 不满足LTL性质 此时可终止搜索并返回由当前搜索路径生成的反例; 否则说明 满足

下面使用文献[10]中的进程互斥模型介绍如何计算 表示其Kripke模型, 表示待验证性质, 其中 表示 , 即进程 位于非关键区, 表示 尝试进入关键区。为了使用惰性切片技术分析验证 是否满足 首先构造 的非确定性Bü chi自动机 对应的NBA如图1所示。

图1 对应的非确定性Bü chi自动机Fig.1 Nondetermistic Bü chi automata of

图1中被有尾无头箭头标记的状态为初始状态, 如 黑边圆表示可接受状态, 如 所有状态到自身的迁移被省略。由于切片标准 中的 仅涉及 两个命题, 所以 的事件集中仅有 包含指派目标变量为 的指派表达式, 根据式(2)可得 由式(3)及文献[10]给出的优化方法可得 图2所示。

图2 Ko对应的状态迁移系统Fig.2 State transition system of Ko

根据步骤4、步骤5可得 的过近似切片 其对应的状态迁移系统如图3所示。由图2图3可以看出, 中共有3个状态, 也仅有4个可达状态。在 上完成对性质 的验证所需代价比在 上进行验证低两个量级。获得 后, 验证 是否满足 的问题, 就被转换为通过可达性分析在 上搜索 的可接受迹的过程, 这个验证过程就是不变性检测。因此可以把 作为惰性切片算法的初始输入。与基于CEGAR的切片方法相似, 当验证过程中出现反例时, 可使用文献[10]给出的方法对反例进行具体化, 从而判定该反例是否是伪反例。

图3 的状态迁移系统Fig.3 State transition system of

由于 共有4个可接受状态 上除了 外, 其他三个状态 都包含了 的可接受状态, 由初始状态出发到这些可接受状态的路径构成反例, 并且这些反例能够在 上找到对应的路径(能够具体化)。即可以在 上找到满足给定LTL性质 的路径, 这条路径就是 不满足 的证据, 该验证结果与实际情况一致。

2.3 算法及其正确性

算法1给出了基于惰性切片的LTL性质验证算法 该算法输入为给定系统模型 和LTL性质 算法获得输入后首先计算 的否定Bü chi自动机 接着构造由 的过近似切片模型 的乘积自动机 惰性搜索, 从而把LTL性质验证问题转换为在 上搜索可接受迹的过程, 当算法发现可接受迹时反回false, 同时把找到的可接受迹作为反例一并返回; 否则说明模型 满足 算法返回true并结束。

算法 1 LazySlicingLTL(K, φ LTL)

Require:Kripke model K, LTL formula φ LTL

Ensure: return true if K|=φ LTL, otherwise return false plus a counterexample

1.Compute ;

2.Compute Ko according to C􀱋=(I􀱋, var(􀱑F));

3.Get from Ko and ;

4.Let :=Vo, R:=∅, U:=null, flag:=false;

5.While 􀱑flag∧ ≠ ∅ do

6. Get a state s from and remove it from ;

7. Push(s, U);

8. R:=R∪ {s};

9. Repeat

10. s':=top(U);

11. If s|≠ 􀱑F then

12. If U is an real counterexample then

13. flag:=true;

14. Else

15. Refine then search lazily;

16. End If

17. Else

18. Search the successor of s' lazily;

19. End If

20. Until flag∨ U=null

21.End while

22.If 􀱑flag then

23. Return true;

24.Else

25. Return Reverse(U);

26.End If

LazySlicingLTL(K, φ LTL)通过把LTL性质验证过程转换为乘积自动机上的惰性搜索过程, 使惰性切片算法能够对LTL性质进行分析验证。由于这种基于惰性切片的LTL验证方法构造的乘积自动机本质上就是一种过近似切片, 所以在乘积自动机上展开的惰性搜索过程就是惰性切片过程。所以由文献[10]中对惰性切片算法的部分正确性定理和可终止性定理可得LazySlicingLTL(K, φ LTL)的部分正确性定理和可终止性定理。

定理1 令 为原始Kripke模型, 对任意 的可终止运行, 有①如果 返回true, 则对 中的任意状态 中必有一个状态覆盖 其中 为由 构造的NBA, 存储 搜索过的状态集合; ②否则, 返回一个混合精度反例 上可具体化, 且 上最后一个状态的标签为 的可接受状态。

定理2 是一个有限状态Kripke模型, 具备的LTL性质, 则 上的一次运行可终止, 即 可终止。

定理1、定理2保证了 算法本身的正确性, 其证明过程与文献[10]中对惰性切片算法的部分正确性和可终止性证明相同。

由于 把LTL性质验证问题转换为在乘积自动机 上的不变性验证过程, 所以当 返回true时仅能得出 满足 的结论, 当其返回反例时也仅得到了一个 不满足 的证据。然而, 算法的最终目的是验证 是否满足 也即下述性质是否成立。

定理3 返回true时 成立, 反回路径 时有 成立。

证明 令 返回true时, 对任意 成立, 也即 的可接受状态集合; 于是对 上的任意路径 所以:

成立, 也即 为空, 所以可得 返回一条路径 时, 令 上最后一个状态, 且有 于是有 于是可得 不为空, 也即 不为空, 所以 的证据, 即

3 实验结果

为了验证 算法的正确性和性能, 分别在一个医疗保险联网审计系统的支付和结算环节模型、Bridge Puzzle标准测试模型(http://anna.fi.muni.cz/models/)上进行了实验。实验目的有两个:一是验证 算法的正确性, 即引入惰性切片算法验证LTL性质前后的验证结果是否一致; 二是对比在基本LTL性质验证算法中引入 算法前后的时间性能。两组实验在一台E5200处理器、2G内存的计算机上完成。在LSVT平台上[10]实现了 组件, 程序运行环境为NetBeans 6.9.1。

第一组实验对医保联网审计系统的支付和结算环节的部分安全性性质进行了验证, 这些安全性性质全部为LTL性质。表1列出了对基本LTL验证算法(记为BC)和 算法(记为LS)进行实验的部分结果。

表1 第一组实验结果 Table 1 Experimental results of group 1

表1中的SatNum列表示调用可满足性判定程序的数, Cost1~Cost3分别表示三次实验过程中的验证代价, 单位为ms, Avg为Cost1~Cost3的平均时间, 单位为ms。最后一列表示模型是否满足给定性质, 如果满足结果为true, 否则为false。第二组实验在Bridge Puzzle模型上进行, 表2列出了实验结果。

表2 第二组实验结果 Table 2 Experimental results of group 2

表1表2的实验结果说明LS算法和BC算法的验证结果是相同的, 也就是说实验结果确认了LS算法的正确性。在相同条件下, LS算法所需的判定器调用次数显著小于BC算法。主要原因是惰性切片算法保持和利用了细化迭代前的已有验证结果, 不会在每次细化过程中都对已经证明过的部分状态空间进行重复验证, 从而显著降低了SAT判定器的调用次数。

图4描述了LS算法的时间代价和SAT判定器调用次数之间的关系。其中实心矩形表示SAT判定器调用次数缩减比, 即BC与LS的SAT调用次数差与BC的SAT调用次数的比值; 实心圆点表示BC与LS验证相同性质时的时间差与BC所需时间的比值。从图4可以看出, LS时间性能的提升程度与判定器调用次数缩减比例的变化趋势基本一致。总的来说, LS算法能够在不损失验证结果正确性的前提下显著地对状态空间进行压缩。

图4 SAT判定器调用次数与LS算法时间代价Fig.4 Number of SAT calls and time cost of LS algorithm

4 结束语

惰性切片能够有效缓解状态空间爆炸问题, 但其仅能直接验证命题逻辑公式表达的不变性性质。本文通过把LTL模型检测问题转换为通过可达性分析搜索可接受状态的不变性验证问题, 解决了惰性切片不能够直接验证线性时间性质的问题。同时, 借助惰性切片对状态空间的压缩能力, 使得基于惰性切片的线性时间验证算法在不损失验证结果正确性的前提下能够处理更大规模的系统。进一步工作将重点研究把基于惰性切片的线性时间性质验证算法集成到SPIN中的方法, 进一步提升LTL模型检测器的可扩展性。

The authors have declared that no competing interests exist.

参考文献
[1] Weiser M. Program slicing[J]. IEEE Transactions on Software Engineering, 1984, 10(4): 352-357. [本文引用:1] [JCR: 2.588]
[2] Brückner I, Wehrheim H. Slicing an integrated formal method for verification[C]∥LNCS, 2005, 3785: 360-374. [本文引用:1]
[3] Yatapanage N, Winter K, Zafar S. Slicing behavior tree models for verification[J]. Theoretical Comput-
er Science, 2010, 323: 125-139. [本文引用:1]
[4] 霍玮, 李丰, 丁兆伟, . 一种提高时序安全属性静态检测实用性的方法[J]. 计算机学报, 2012, 35(2): 244-256.
Huo Wei, Li Feng, Ding Zhao-wei, et al. A precise and scalable static checking approach for temporal safety property[J]. Chinese Journal of Computers, 2012, 35(2): 244-256. [本文引用:1] [CJCR: 1.796]
[5] 张献, 董威, 齐治昌. 基于AOP的运行时验证中的冲突检测[J]. 软件学报, 2011, 22(6): 1224-1235.
Zhang Xian, Dong Wei, Qi Zhi-chang. Conflicts detection in runtime verification based on AOP[J]. Journal of Software, 2011, 22(6): 1224-1235. [本文引用:1] [CJCR: 2.181]
[6] 王雷, 陈归, 金茂忠. 基于约束分析与模型检测的代码安全漏洞检测方法研究[J]. 计算机研究与发展, 2011, 48(9): 1659-1666.
Wang Lei, Chen Gui, Jin Mao-zhong. Detection of code vulnerabilities via constraint-based analysis and model checking[J]. Journal of Computer Research and Development, 2011, 48(9): 1659-1666. [本文引用:1]
[7] Clarke E, Grumberg O, Jha S, et al. Counterexample guided abstraction refinement for symbolic model checking[J]. Journal of the ACM, 2003, 50(5): 752-794. [本文引用:1] [JCR: 2.37]
[8] Wehrheim H. Incremental slicing[J]. Formal Methods and Software Engineering, 2006, 4260: 514-528. [本文引用:1]
[9] Sabouri H, Sirjani M. Slicing-based reductions for Rebeca[J]. Electronic Notes in Theoretical Computer Science, 2010, 260(1): 209-224. [本文引用:1]
[10] Huang Shao-bin, Huang Hong-tao, Chen Zhi-yuan, et al. Lazy slicing for state-space exploration[J]. Journal of Computer Science and Technology, 2012, 27(4): 872-890. [本文引用:1] [CJCR: 0.4]
[11] 黄宏涛. 基于懒惰切片的模型检测技术研究[D]. 哈尔滨: 哈尔滨工程大学, 2012.
Huang Hong-tao. Research on lazy slicing-based model checking[D]. Harbin: Harbin Engineering University, 2012. [本文引用:1] [CJCR: 0.464]
[12] Henzinger T A, Jhala R, Majumdar R, et al. Lazy abstraction[J]. ACM SIGPLAN Notices, 2002, 37(1): 58-70. [本文引用:1]
[13] Graf S, Sadi H. Construction of abstract state graphs with PVS[J]. Computer Aided Verification, 1997, 1254: 72-83. [本文引用:1]