如何通过CUDD包替换BDD中的某些变量?

时间:2017-02-24 00:59:06

标签: model-checking binary-decision-diagram cudd

假设DdManager有四个变量:x, y, x', y'我有一个由xy构建的BDD。 现在,我想将x更改为x',将y更改为y',即获得由x'y'构建的相同BDD。< / p>

如何使用CUDD包获得此功能?当我想实现模型检查算法时遇到了这个问题。我想知道如何实现这个操作或者我是否误解了符号模型检查算法? 非常感谢你!

2 个答案:

答案 0 :(得分:2)

使用函数Cudd_bddSwapVariables执行此操作。它获得以下参数:

  1. BDD经理
  2. 您希望由其他人替换变量的BDD。
  3. 第一个变量数组(由Cudd_bddNewVar返回的BDD节点表示)
  4. 第二个变量数组
  5. 要交换的变量数。
  6. 您需要自己分配和释放阵列。

答案 1 :(得分:0)

使用package dd中包含的CUDD的Cython绑定进行变量替换的示例:

from dd import cudd

bdd = cudd.BDD()  # instantiate a shared BDD manager
bdd.declare("x", "y", "x'", "y'")
u = bdd.add_expr("x \/ y")  # create the BDD for the disjunction of x and y
rename = dict(x="x'", y="y'")
v = bdd.let(rename, u)  # substitution of x' for x and y' for y
s = bdd.to_expr(v)
>>> s
"ite(x', TRUE, y')"

# another way to confirm the result is as expected
v_ = bdd.add_expr("x' \/ y'")
assert v == v_