概述
1 BDT → to →BDD → to →OBDD
在符号模型检测中, 用布尔表达式表达一组状态,也就是对布尔公式中的每个变量赋值,可以计算出一个布尔值结果:
f
:
B
o
o
l
n
→
B
o
o
l
f: Bool^n to Bool
f: Booln→Bool
所以可以用一个类似于组合解空间树(如果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还可以被约简,考虑两个方面:
- 合并同构子图,使得没有两个不同的结点有相同的变量(相同的变量在OBDD里只有可能在同一层)以及相同的 l o w ( ⋅ ) low(cdot) low(⋅)和 h i g h ( ⋅ ) high(cdot) high(⋅)子结点。对应于ROBDD的性质唯一性(Uniqueness)。
- 消除冗余,使得没有结点有相同的 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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复