“CEGAR完整算例逐项列出两非负谓词的粗图与加入相等谓词后的精图,检查一轮路径的UNSAT和切口插值,并交出只含循环头111与检查点111的封闭可达集。每张表同时给出可满足边的见证和其余边不…”
形式陈述
闭环的四个阶段
CEGAR 维护具体系统
可靠抽象要求
因此抽象系统证明安全即可推出具体安全。抽象系统发现反例却只说明“可能违反”,必须经过 concretization feasibility check。
精化应满足行为收缩
并排除当前伪反例。只增加新术语而不删除该路径,不构成有效精化进展。
用谓词立方体定义每一条抽象边
以下固定数学整数变量
只保留可满足立方体,控制位置
初始节点另由 bad 节点,只问能否到达它。
这一定义的可靠性有直接证明:把任一具体初态映射到其立方体,得到抽象初态;每次具体转移的实际端点就是存在量词的见证,所以归纳把整条具体运行映为抽象运行。因而抽象图无 bad 路径就证明具体安全。反过来,每条抽象边的见证可以不同,不保证能拼成一条具体路径。[1, §2]
直觉
在循环头保留状态,而不是混淆语句中间点
考虑程序
x := 0
y := 0
while nondet:
x := x + 1
y := y + 1
assert x == y
取循环头 bad。把一次完整循环体的两条赋值合成为 x++ 后、y++ 前确实有
省略不再影响错误可达性的成功终止节点,模型是
循环可以任意继续或退出;证明目标是所有能够退出的运行都通过断言,而不是强迫非确定循环终止。bad 没有后继。下文把循环边、退出边、失败边分别列完,不依赖隐藏的转移规则。
粗谓词
例子与边界
粗图的全部转移
| 源位向量 | 循环目标 | 对应源状态见证 |
|---|---|---|
未列边要求一个非负坐标经加一后成为负数,所以不存在。退出边恰是每个
唯一初始位向量是
其中 bad 的失败边。
同一条路径的公式为何 UNSAT
选择“循环一次,再退出并失败”的抽象反例。给各位置引入不同状态帧,得到
三个
失败边本身可以用
一般地,若反例指定了抽象节点
合并的 bad 节点取
插值给出相等谓词
在循环后切开
二者共享的自由符号只有
精图的全部转移与最终可达集
加入
| 源位向量 | 循环目标 | 对应源状态见证 |
|---|---|---|
没有列出的目标都不可满足:两个符号位只会从0变1,等号位由
每个可满足立方体都保留恒等退出边。只有等号位为0的
丢弃第三位把每个精节点映回粗节点;任一精边的具体见证也是对应粗边的见证,因此精图没有增加具体行为。原先用相等前缀接不等失败见证的路径被删除,而任何真实运行仍由存在转移定义覆盖。
收敛与失败边界
有限状态系统若精化策略最终能区分每个必要具体状态,最坏可退化到精确模型并终止。对无限状态软件,CEGAR 不保证找到有限谓词集,也可能不断产生新反例而不收敛。
求解器 unknown 既不是真实反例也不是不可行证明。把超时当 UNSAT 会错误删除可能真实路径,把它当 SAT 又可能报告无法重放的警报;工具应保留 unknown 状态。
精化也可能过拟合一条路径:加入只排除某个具体常数的谓词,下一轮出现同构伪反例。好的概括来自失败原因,而非反例表面数字。
推论与应用
安全结论的三个可检查义务
最终证书可以只交出上面的谓词表、完整边判定依据以及集合 bad。第一点由零初值,第二点由
也可把相同证书写成循环头和检查点的归纳断言
初值满足它;两个坐标同时加一保持它;退出不改变它;它蕴涵断言
若把循环体改为 x:=x+1; y:=y+2,同一轮后的实际状态是
与抽象解释的关系
抽象解释提供可靠 over-approximation 的数学基础;CEGAR 是选择和迭代改进抽象的一种控制循环。它不是独立于 soundness 的“反复跑模型检查”技巧。
区间阈值、谓词集合、状态分裂和 transition refinement 都可成为 refinement 维度。每种选择要说明哪部分 concretization 变小以及为何仍覆盖具体行为。
终止时还应区分两种证书:真实反例附具体可行路径;安全结果附最终抽象的可靠性和抽象模型无反例证明。只保存“循环若干轮后工具返回 safe”不足以复核结论。
参考资料
[1] Edmund Clarke、Orna Grumberg、Somesh Jha、Yuan Lu、Helmut Veith,Counterexample-guided Abstraction Refinement,CAV 2000,154–169页;§2给出存在抽象与安全性蕴涵,§4.2讨论同一具体路径的可行性及累计像集检查。本文的整数循环图与可靠性在正文独立给出。
[2] Kenneth L. McMillan,Interpolation and SAT-Based Model Checking,CAV 2003,1–13页;第1页定义插值三条件,§3说明路径切分时共享符号是切口状态。该文的主要算法是有限状态插值模型检查。
[3] Thomas A. Henzinger、Ranjit Jhala、Rupak Majumdar、Kenneth L. McMillan,Abstractions from Proofs,POPL 2004,232–244页;§2与§4定义谓词抽象,§§4–5.1用带状态帧的路径公式、插值切分和谓词清理连接不可行证明与精化。