我试图了解两个 ROBDD 的组合是如何工作的。
F1 = (d? false: (c? (a? false: true): false))
F2 = (d? (b? true: (a? false: true)): (c? (b? true: (a? false: true)): true))
我需要找到一个公式,该公式F3
是通过替换公式中所有出现的d
公式F1
来获得的F2
。
我该如何继续解决这个问题?
我试图了解两个 ROBDD 的组合是如何工作的。
F1 = (d? false: (c? (a? false: true): false))
F2 = (d? (b? true: (a? false: true)): (c? (b? true: (a? false: true)): true))
我需要找到一个公式,该公式F3
是通过替换公式中所有出现的d
公式F1
来获得的F2
。
我该如何继续解决这个问题?
替换、BDD 的组合、变量重命名、辅因子和求值都是相同的数学运算:替换。您可以使用Python 包dd
进行您感兴趣的替换,如下所示:
import dd.autoref as _bdd
f1_formula = 'ite(d, FALSE, ite(c, ite(a, FALSE, TRUE), FALSE))'
f2_formula = (
'ite(d, ite(b, TRUE, ite(a, FALSE, TRUE)), '
'ite(c, ite(b, TRUE, ite(a, FALSE, TRUE)), TRUE))')
# create a BDD manager and BDDs for the above formulas
bdd = _bdd.BDD()
bdd.declare('a', 'b', 'c', 'd')
f1 = bdd.add_expr(f1_formula)
f2 = bdd.add_expr(f2_formula)
# substitute `f1` for `d` in `f2`
sub = dict(d=f1)
r = bdd.let(sub, f2)
# dump the BDDs to a PNG file
bdd.dump('foo.png', [f1, f2, r])
print(f'f1: {f1}, f2: {f2}, r: {r}')
以上创建输出:
f1: @-7, f2: @14, r: @11
以及foo.png
如下所示的文件。对于将布尔值分配给变量:
f1_formula
对应于节点 7 的否定 BDDf2_formula
对应于节点 14 的 BDDr
(组合)对应于节点 11 的 BDD。“let”方法以TLA+LET... IN
中的构造命名。