我使用JavaBDD进行BDD表示,我需要将其转换为联合正常形式,以便能够与其他工具结合使用。我想知道实现转换的最佳方法是什么。提取DNF似乎很简单(只提取所有路径为“1”)但我不确定什么是回合CNF的最佳方式。任何想法都将不胜感激。
答案 0 :(得分:2)
将所有路径提取为0.每个路径必须翻译成子句。
让¬A,B,C成为你的0路之一。相关条款为(A∨¬B∨¬C)。
一旦你掌握了所有条款,只需在它们之间放一个∧!
该算法与calculate a CNF from a truth table使用的算法相同。
答案 1 :(得分:1)
等效CNF的大小可以是BDD大小的指数。根据您的应用,可以引入辅助变量,例如通过使用Tseitin转换。当且仅当BDD可满足时,得到的CNF才是可满足的,但由于附加变量,它在逻辑上不等同。