Skip to content

定义Definition

模型检查问题

Model checking problem · Model checking

给定系统模型与形式规格,判定所有指定初始行为是否满足公式,并交付证明结果或诊断见证。

形式陈述 ​

Model–Specification–Decision–Witness ​

一项模型检查任务由四部分组成:

  1. Model:有限或有限表示的系统模型 M,包括初始状态与转移;
  2. Specification:在明确语义下解释的规格 φ;
  3. Decision:判定指定初始行为是否满足规格;
  4. Witness:为违反、存在性成立或证明成功提供可核验的诊断对象。

对Kripke 结构 K=(S,I,R,AP,L),全局 decision 通常写作

K⊨φ⟺∀s0∈I,K,s0⊨φ.

局部问题给定单个状态 s,询问 K,s⊨φ。若公式是路径公式,还要按照所选时序逻辑规定路径量词;不能在 LTL、CTL 和 CTL* 之间复用一个未说明的满足符号。

decision 至少区分 satisfied 与 violated。后者的证书常是反例路径,存在性公式成立时可给见证路径,安全证明则可给归纳不变式。证书能否由较小内核独立检查,是工具可信边界的一部分;布尔答案本身既不解释根因,也不证明模型和规格写对。

对给定控制器进行检查时,环境的所有选择仍须纳入模型。若问题改为寻找一个能抵抗所有环境选择的控制器,量词就从“给定策略后对所有环境行为验证”变成“存在控制策略,对所有环境行为安全”。安全博弈与反应式综合通过区分控制器和环境顶点,计算获胜区域并输出策略;不可实现时则输出环境反策略。

Soundness、completeness 与 termination ​

这三个保证应分开陈述。算法 sound,表示它报告的结论在规定语义下为真:例如每条输出反例确实从初态沿合法转移到达违反状态。算法 complete,表示输入类中每个应有的答案都不会永久漏掉;作为 decision procedure 还需保证终止。

近似工具可能只对一侧 sound。一个有界检查器可以对 violated sound,因为 SAT 模型可解码为真实路径,却不能把普通 UNSAT sound 地升级成全局 satisfied。反过来,过近似抽象证明安全通常是 sound 的,但抽象反例可能虚假,需要精化。只写“工具是可靠的”不足以说明哪一类输出受保证。

直觉

一个小型互斥检查 ​

设两个进程的组合状态为 (ℓ1,ℓ2),每个位置属于 N,T,C。初始状态是 (N,N),规格为

φ=G¬(c1∧c2).

显式检查可以从初态枚举可达图。若模型允许每个进程独立执行 N→T→C,就有反例 (N,N)→(T,N)→(C,N)→(C,T)→(C,C)。每一步只推进一个进程,最后状态使两个临界区命题同时为真;这说明“每次只运行一个进程”本身并不保证互斥。

若改为仅当另一进程不在 C 时才能执行 T→C,上述最后一步便被禁止。要证明修改后的模型安全,仍须穷尽全部可达状态或提供归纳不变式,不能只重放这一条已被阻断的反例。

这个结论的量词覆盖模型中的全部可达交错,不只是测试运行采样到的路径。反过来,它只覆盖模型写出的进程位置、共享变量和转移;若真实代码还有未建模的中断处理,模型检查并未验证那条实现路径。

模型检查:模型、规格、决定与见证
例子与边界

求解路线不属于问题定义 ​

“模型检查”是一类判定任务,不是一种固定搜索算法。显式搜索枚举可达图,符号方法压缩状态集合,自动机路线寻找接受环,有界方法只展开有限深度,归纳方法则学习可推广的安全证书。它们共享 model–specification–decision 接口,却有不同的 soundness/completeness 条件、资源尺度和 witness 形状;更换后端不能偷偷更改原问题的满足关系。具体适用范围也须匹配:显式可达搜索和有限布尔 PDR直接处理安全性,CTL 可用精确符号不动点,LTL 可用自动机积判空。BMC在普通边界内只实现有界反例查询;只有再给出相应完备阈值或归纳证书时,它才为原来的全局任务交付判定。

复杂度的正确尺度 ​

显式图已经给出时,基本可达性成本按 |S|+|R| 衡量。若模型由 n 个布尔变量紧凑描述,潜在状态数却是 2n。因此“对状态数线性”不等于“对程序文本线性”。

公式大小同样属于输入。CTL 检查对显式 Kripke 图和公式大小可做到近线性乘积量级;LTL 路线通常在公式长度上产生指数规模的自动机,再对乘积图做线性搜索。复杂度陈述必须指出模型表示、逻辑种类与公式是否固定。

无限状态系统不能直接以有限 |S| 计数。某些系统有有限符号表示并可借抽象、归纳或约束求解处理,另一些模型检查问题不可判定。工具在若干基准上终止,不能推出整个语言片段都有判定算法。

反例、无反例与证明 ​

安全性质的反例通常是一条到达坏状态的有限路径;liveness 反例常是 stem 加 cycle 的 lasso,表示无限重复的坏行为。CTL 的存在或全称子公式还可能需要树状 witness,而不总是一条线性路径。

有界模型检查找到长度不超过 k 的真实路径时,反例是可靠的。若 SAT 求解器只返回“k 内无反例”,这并不证明更长路径不存在;只有达到已证明的 completeness threshold,或另有归纳证书时,才能把无反例升级为全局正确。

安全证书可以具体写成状态集合 J:检查 I⊆J、s∈J∧R(s,s′)⇒s′∈J,以及 J 不含坏状态。三个义务分别保证覆盖起点、沿每一步封闭和排除错误;它们说明为什么有限证书可以覆盖任意长执行。只列出若干已访问的安全状态,若没有闭包检查,就还不是这种证书。

反例也不自动定位根因。最短反例减少路径长度,却可能穿过多个症状状态;工程诊断还需映射回源代码、输入和环境假设。

推论与应用

实现路线由规格形态和状态表示决定。符号模型检查用 BDD 或逻辑公式整体表示状态集合并做不动点运算;自动机论模型检查把 LTL 等性质转成 ω-自动机,再检查与系统积的空性;Property-Directed Reachability / IC3为安全性质逐层学习归纳子句。三者分别依赖可压缩集合表示、自动机翻译和可归纳阻断,不存在对任意模型都占优的单一后端。

模型、规格与实现三层 ​

正确性陈述必须固定被验证对象。模型检查能证明 M⊨φ,但要推广到实现 P,还需要证明 P 的行为被 M 覆盖,或建立 simulation/refinement。若抽象模型遗漏实现行为,模型内证明依然可能为真。

规格本身也可能错误。公式 G¬error 若把所有错误状态都漏标成正常,检查器会忠实地返回满足。模型检查减少的是状态空间内的遗漏,不代替需求评审和原子命题校准。

有限状态不等于小状态。并发组件的笛卡尔积、变量域和队列内容都会造成状态空间爆炸。某种表示或约简能否缓解它,取决于模型结构和待保持性质;把工具链名称列得更长,不会让任意系统自动变得紧凑。

参考资料
  • Edmund M. Clarke and E. Allen Emerson, “Design and Synthesis of Synchronization Skeletons Using Branching Time Temporal Logic,” Logic of Programs, Springer, 1981, pp. 52–71。
  • Edmund M. Clarke, Orna Grumberg, and Doron A. Peled, Model Checking, MIT Press, 1999, Chs. 1–4。
  • Christel Baier and Joost-Pieter Katoen, Principles of Model Checking, MIT Press, 2008, Chs. 1, 4–6。
  • Edmund M. Clarke, Thomas A. Henzinger, Helmut Veith, and Roderick Bloem, eds., Handbook of Model Checking, Springer, 2018, Chs. 1–3。
关系图谱16 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系