我是靠谱客的博主 想人陪蜡烛,最近开发中收集的这篇文章主要介绍【模型检测学习笔记】9:Binary Decision Diagrams,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1 BDT → to BDD → to OBDD

在符号模型检测中, 用布尔表达式表达一组状态,也就是对布尔公式中的每个变量赋值,可以计算出一个布尔值结果:
f :   B o o l n → B o o l f: Bool^n to Bool f: BoolnBool

所以可以用一个类似于组合解空间树(如果1视为选,0视为不选)的结构,即Binary Decision Tree (BDT) 来表达一个布尔公式,如下图:
在这里插入图片描述

图中每个结点 v v v有两个孩子分支,一条虚线对应 l o w ( v ) low(v) low(v)表示 v = 0 v=0 v=0,一条实线对应 h i g h ( v ) high(v) high(v)表示 v = 1 v=1 v=1。如果不加任何约束,一个布尔公式可以对应多种结构的BDT。

将BDT的所有相同的叶子结点(实际上就只有0和1)合并,就成了Binary Decision Diagram (BDD)。为了保证结构统一,再要求每一层的变量是同一个,即保证所有从根结点到叶子结点的路径上的变量顺序是固定的,就形成了Ordered Binary Decision Diagram (OBDD) ,如下图:
在这里插入图片描述
给定一个布尔表达式,从语法层面上来看,可以表示成合取范式(Constructive Normal Form,也称Product of Sum)、析取范式(Disjunctive Normal Form,也称Sum of Product)、电路(Circuit)等;从语义层面上来看,可以表示成真值表(Truth Table)、BDD等。

2 Reduced OBDD

OBDD还可以被约简,考虑两个方面:

  1. 合并同构子图,使得没有两个不同的结点有相同的变量(相同的变量在OBDD里只有可能在同一层)以及相同的 l o w ( ⋅ ) low(cdot) low() h i g h ( ⋅ ) high(cdot) high()子结点。对应于ROBDD的性质唯一性(Uniqueness)
  2. 消除冗余,使得没有结点有相同的 l o w ( ⋅ ) low(cdot) low() h i g h ( ⋅ ) high(cdot) high()子结点。对应于ROBDD的性质非冗余测试性(Non-redundant test)

上面的OBDD合并同构子图后,如下图:
在这里插入图片描述

再消除冗余后,得到Reduced Ordered Binary Decision Diagram (ROBDD),如下图:
在这里插入图片描述

大多数时候,BDDs指的就是化简完的ROBDD。对于一个布尔表达式,在给定的变量顺序下,ROBDD是唯一的。使用ROBDD可以在线性时间内做等价性检验(Equivalence Checking),在常数时间内做满足性检验(Satisfiability Checking)

对于同一个布尔表达式的不同变量顺序下的ROBDD,其复杂程度可能相差非常大,如下图:
在这里插入图片描述
寻找最佳的变量顺序是NP难问题。

3 两OBDD上的APPLY运算

给定 B ϕ Bphi Bϕ B ψ Bpsi Bψ是两个OBDD,其中 ϕ phi ϕ ψ psi ψ表示它们所表示的布尔表达式,定义两OBDD的APPLY运算:
a p p l y ( o p ,   B ϕ ,   B ψ ) apply(op, Bphi, Bpsi) apply(op, Bϕ, Bψ)

其运算结果是对应与布尔表达式 ϕ   o p   ψ phi op psi ϕ op ψ的OBDD。

具体计算方法是,从根节点出发,每次找两个OBDD的相对应的path的结果进行op运算,得到的就是新的OBDD上这条path的结果。
在这里插入图片描述

4 OBDD上的RESTRICT运算

给定 B ϕ Bphi Bϕ是一个OBDD,定义RESTRICT运算:
r e s t r i c t ( 0 ,   x ,   B ϕ ) r e s t r i c t ( 1 ,   x ,   B ϕ ) restrict(0, x, Bphi) \ restrict(1, x, Bphi) restrict(0, x, Bϕ)restrict(1, x, Bϕ)

其运算结果是对布尔表达式中 x x x进行真值指派( ϕ [ 0 / x ] phi[0/x] ϕ[0/x] ϕ [ 1 / x ] phi[1/x] ϕ[1/x])得到的新公式的OBDD。

以指派为 0 0 0为例( 1 1 1也是类似的),具体计算方法是,对于所有变量是 x x x的结点 v v v,让其入边直接指向 l o w ( v ) low(v) low(v),然后删除结点 v v v
在这里插入图片描述

参考阅读

BDD MODEL CHECKING by Loïc Massin

最后

以上就是想人陪蜡烛为你收集整理的【模型检测学习笔记】9:Binary Decision Diagrams的全部内容,希望文章能够帮你解决【模型检测学习笔记】9:Binary Decision Diagrams所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部