“有界模型检查把有限步转移与坏状态编码成命题公式,PDR/IC3则从 SAT 反例中学习归纳子句。二者使用命题逻辑作为求解接口,但要验证的对象仍是状态系统,性质是否成立也仍量化其全部相关执行。”
Frame 序列不变量 ​
对布尔转移系统
满足
若某相邻层语义相等
加上
从坏状态建立 obligation ​
算法先询问可满足性
若 SAT,得到一个可能一步进入坏状态的 predecessor cube
若 obligation 一直追到层
这不是普通反向 BFS:frame 是可达集的逻辑外包络,obligation 是具体或部分状态 cube,SAT 求解器隐式处理大量状态。
子句泛化与阻塞 ​
设当前待阻塞义务为
若查询 SAT,模型在当前状态变量
验证通过后,把子句
SAT 求解器的 unsat core 可帮助删除 cube 中不必要的文字,得到更一般的阻塞子句,一次排除更多状态。泛化必须重新验证相对归纳查询;凭启发式删文字可能连真实可达状态一起排除。
例如 cube 指定十个变量,core 只依赖锁位和两个程序计数器,学到的子句便覆盖所有其他变量赋值。这是 PDR 不逐状态枚举的关键来源。
推送与收敛 ​
若子句
它可推送到
有限布尔状态系统上,理想化 IC3 过程完备:最终找到反例或归纳不变式。实际性能高度依赖 obligation 顺序、generalization、clause subsumption 与 SAT 增量接口。
“frame 数不再增加”不等于收敛;必须检查某对相邻 frame 公式语义等价或子句集合在规范管理下相同。
与 BMC 的差别 ​
BMC 前向展开固定长度路径,UNSAT 通常只有边界意义。PDR 的查询围绕归纳阻塞,目标是主动合成一个全局不变式;它也会生成反例,但不是“更快的 BMC”同义词。
PDR 对 safety/reachability 最自然。一般 LTL 需先做监控器或自动机产品转成安全/接受问题,公平 liveness 不能直接套原始 frame 不变量。
无限状态 SMT-PDR 可能不终止,量词和理论泛化也可能不完备。有限布尔模型上的保证不能无条件推广到软件整数与堆。
一个阻塞子句例子 ​
设安全性质禁止
这条子句同时阻塞所有数据位组合,比逐一排除完整 cube 更强。若 core 还依赖上一层特有子句,它只相对于该 frame 归纳,不能直接提升到所有层。
子句管理还要做 subsumption:强子句可删除被其蕴含的弱子句,但反向删除会扩大 frame 并可能重新引入坏状态。语法文字数少不自动代表逻辑更强。
参考资料
- Aaron R. Bradley, “SAT-Based Model Checking without Unrolling,” VMCAI, 2011, pp. 70–87。
- Niklas Eén, Alan Mishchenko, and Robert Brayton, “Efficient Implementation of Property Directed Reachability,” FMCAD, 2011, pp. 125–134。
- Aaron R. Bradley and Zohar Manna, The Calculus of Computation, Springer, 2007, Chs. 12–14。