抽象引导的模型检查:BDD - IDA*算法与GOLFER工具的研究与实践
1. 算法构建方法
在模型检查中,有两种重要的构建方法:反向构建和正向构建。
- 反向构建 :采用基于BDD的广度优先搜索(BFS)策略来探索近似模型$\hat{M}_{app}$,从抽象目标状态开始。将每个前沿BDD放入启发式哈希表中,迭代次数作为SPDB的条目。若遇到抽象初始状态,则终止搜索。
- 正向构建 :从抽象初始状态开始,临时存储每个前沿状态。当搜索检测到抽象目标时,从目标状态反向提取到初始状态的路径。构成该路径的BDD集合即为正向SPDB,此过程与标准不变性检查中的反例提取相同,且这里生成的路径是反向SPDB提取路径的子集。
若启发式合成过程在近似模型$\hat{M}_{app}$中找不到轨迹,根据引理1,原模型$M$不存在反例。
2. BDD分割算法
设$\sigma = {B_1, B_2, \ldots, B_n}$是通过上述三相过程合成的启发式(SPDB)。以下算法将一个BDD分割成几个不相交的子集:
Procedure SplitAndPush (Cost, S, σ)
for each Bi ∈σ do
I ←S ↓Bi
if (I ≠ φ)
stack.push() ←(Cost + 1, i, I)
S ←S ∧I
if (S ≠ φ)
stack.push() ←(Cost + 1, ∞, S)
超级会员免费看
订阅专栏 解锁全文
3226

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



