有界模型检查的证明引导下近似拓宽
1. 程序验证条件构建
在程序验证中,对于基本块 $j$,若其以 goto 语句结尾,验证条件 $\psi_j$ 为:
$blkj \Rightarrow (stj \land \bigwedge_{s \in successor(j)} (blks \land (is == flow(ij))))$
若基本块 $j$ 以 return 语句结尾,$\psi_j$ 为:
$blkj \Rightarrow stj$
假设过程执行开始的基本块标记为 $s$,过程的验证条件(VC)构建如下:
$blks \land \bigwedge_{l \in basicblocks(p)} \psi_l$
当忽略过程调用(将其视为 assume true )时,得到的 VC 称为部分 VC(pVC)。
2. 静态内联与动态内联
- 静态内联 :对于一个以
main为起始过程的程序 $P$,一种简单的验证方法是内联所有过程调用构建main的 VC,然后用 SMT 求解器检查其可满足性。但这种静态内联策略会使 VC 规模呈指数级增长。 - 动态内联 :采用分层内联(Stratified Inlining,SI)算法,它运用反例引导的抽象精化(CEGAR)技术动态内联过程 VC。动态内联在抽象精化过程中生成更紧凑的 VC,从而显著加快程序验证速度
超级会员免费看
订阅专栏 解锁全文
2223

被折叠的 条评论
为什么被折叠?



