假设我有以下布尔函数:
or(x, y) := x || y
and(x, y) := x && y
not(x) := !x
foo(x, y, z) := and(x, or(y, z))
bar(x, y, z, a) := or(foo(x, y, z), not(a))
baz(x, y) := and(x, not(y))
现在我想用它们构建一个二元决策图。我浏览了几篇论文,但还没有找到如何从像这样的嵌套逻辑公式中构造它们。
据说布尔函数是有根有向无环图。它有几个非终端和终端节点。然后它说每个非终端节点都由一个布尔变量(不是函数)标记,该变量有两个子节点。我不知道上面的函数定义中的布尔变量是什么。从节点到子节点的边a
或分别b
代表节点分配为 0 或 1。如果同构子图已合并,则称为归约,并且删除了两个子同构的节点。这是一个降序二元决策图(ROBDD)。
由此,以及我遇到的所有资源,我无法弄清楚如何将这些函数转换为 BDD/ROBDD:
foo(1, 0, 1)
bar(1, 0, 1, 0)
baz(1, 0)
或者也许是这些需要转换:
foo(x, y, z)
bar(x, y, z, a)
baz(x, y)
寻求帮助来解释我需要做什么才能将其变成有根、有向、无环图。了解数据结构的样子也会有所帮助。似乎只是这样:
var nonterminal = {
a: child,
b: child,
v: some variable, not sure what
}
但接下来的问题是如何从这些函数foo
、bar
和构建图形baz
。