将BDD转换为CNF

时间:2013-10-21 07:27:24

标签: binary-decision-diagram

我使用JavaBDD进行BDD表示,我需要将其转换为联合正常形式,以便能够与其他工具结合使用。我想知道实现转换的最佳方法是什么。提取DNF似乎很简单(只提取所有路径为“1”)但我不确定什么是回合CNF的最佳方式。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:2)

将所有路径提取为0.每个路径必须翻译成子句

让¬A,B,C成为你的0路之一。相关条款为(A∨¬B∨¬C)。

一旦你掌握了所有条款,只需在它们之间放一个∧!

该算法与calculate a CNF from a truth table使用的算法相同。

答案 1 :(得分:1)

等效CNF的大小可以是BDD大小的指数。根据您的应用,可以引入辅助变量,例如通过使用Tseitin转换。当且仅当BDD可满足时,得到的CNF才是可满足的,但由于附加变量,它在逻辑上不等同。