恒定输入如何影响问题的 SAT 表述?

How does constant inputs affect SAT formulation of a problem?

假设我有一个带有 N 个输入和 1 个输出的黑盒电路。

我想固定 M 个输入的值并找到电路可满足的其余输入 (N-M) 的值。如果我手动修复 verilog RTL 中的 M 输入,并将其转换为 CNF(使用 abc),这会产生正确的结果吗?这是解决这类问题的正确方法吗?

您问题的原始搜索 space 有 2^N 个条目。通过修复 M 输入,搜索 space 减少了 2^M 倍并且有 2^(N-M) 个条目。

根据您对固定 M 输入值的选择,您可以简化搜索或减少搜索 space 太多,最终没有解决方案。

你的黑盒子是一个组合电路,输出完全取决于输入的当前状态?在 RTL(寄存器传输 level/language)设置中,您还可以描述顺序机制,其中输出还取决于先前的输入。

考虑到固定输入被称为Boolean Constraint Propagation。这基本上简化了您的电路,因为可以移除所有具有预定输出的元件。示例:具有一个或多个错误输入的 AND 具有 false 输出。具有一个或多个 true 输入的 OR 具有 true 输出,等等。其他简化包括删除双重否定和 XOR/XNOR 门的反向输入对。

你可以看看bc2cnf, a translator from a Boolean netlist format to a SAT solver digestible DIMACS/CNF file. Similarly to ABC, bc2cnf will propagate constant inputs and deliver a fairly optimized CNF