“PDR/IC3通过学习阻塞子句得到归纳屏障,k归纳通过展开窗口寻找证明;二者可配合辅助不变式,但不是同一个算法的不同名字。”
形式陈述
Frame 序列不变量
作为一种模型检查算法,PDR 对有限布尔转移系统
满足
若某相邻层语义相等
加上
直觉
从坏状态建立 obligation
算法先询问可满足性
若 SAT,得到一个可能一步进入坏状态的 predecessor cube
对每个 obligation
这不是普通反向 BFS:frame 是可达集的逻辑外包络,本页为便于直接重放,把 obligation 保留为完整状态赋值的 cube,SAT 求解器则隐式搜索大量状态;学习的阻塞子句可以概括多个状态。使用部分 cube 作为路径义务的优化,还须另证前后模型可以一致拼接。
例子与边界
子句泛化与阻塞
设当前待阻塞义务为
若查询 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,作者版 §§3–4、PDF pp.3–5:initiation 与 consecution、初始零/一步检查及 frame 不变量。
- 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。