我的公式是DNF,z3会转换成CNF吗?

我的公式是DNF,z3会转换成CNF吗?,z3,smt,Z3,Smt,DNF SAT是多项式时间,而CNF SAT是NP完全的。如果我有一个一阶公式,其布尔骨架已经在DNF中,z3会意识到这一点吗,或者它会盲目地将公式转换为CNF以由CDCL求解?它可能会,特别是在具有推/拉和/或API中使用的策略的交互上下文中。当这种情况发生时,产生的约束应该相对容易解决。然而,这确实提出了一个问题,为什么所有的立方体都被交给Z3,而每个立方体都可以被独立地检查,从而减少了启发式算法混淆的空间。谢谢。这意味着一个接一个地迭代检查每个杯子比检查所有杯子的析取更有效。我说的对吗?可

DNF SAT是多项式时间,而CNF SAT是NP完全的。如果我有一个一阶公式,其布尔骨架已经在DNF中,z3会意识到这一点吗,或者它会盲目地将公式转换为CNF以由CDCL求解?

它可能会,特别是在具有推/拉和/或API中使用的策略的交互上下文中。当这种情况发生时,产生的约束应该相对容易解决。然而,这确实提出了一个问题,为什么所有的立方体都被交给Z3,而每个立方体都可以被独立地检查,从而减少了启发式算法混淆的空间。

谢谢。这意味着一个接一个地迭代检查每个杯子比检查所有杯子的析取更有效。我说的对吗?可能是的。这实际上取决于每个文本中的确切内容。例如,当所有间断共享一个简化器可以简化的理论表达式,并使所有间断都为假时,同时在所有间断上运行Z3会更快,以避免重复调用简化器。相反,如果每个discjuncts都完全描述了不同的模型,那么只为了选择第一个作为结果而对它们进行编码将不必要的开销。