【发布时间】:2021-03-26 20:53:06
【问题描述】:
我们来看下面的问题:f(a, b, c, x, y, z)是一个布尔函数,其中a、b、c、x、y和z是布尔值,f的输出是一个布尔值。 f 的定义由许多 and/or/nor 运算符组成。我想找到一组三个布尔值 x0、y0 和 z0,这样:
f(0, 0, 0, x0, y0, z0) = 0 AND
f(0, 0, 1, x0, y0, z0) = 1 AND
f(0, 1, 0, x0, y0, z0) = 1 AND
f(0, 1, 1, x0, y0, z0) = 0 AND
...
f(1, 1, 1, x0, y0, z0) = 1 # A total of 8 constrains. Each of them is from an entry in the truth table.
一种天真的做法是定义3个布尔变量x、y、z,重复定义函数f8次。然而 f 由复杂的布尔表达式组成。定义它 8 次可以炸毁模型。而且,实际上,我有 7 个变量:a、b、c、d、e、f、g。真值表有 128 个条目。
有没有办法定义诸如“占位符”变量 a、b、c 之类的东西,它们不是解决方案的一部分?然后我可以在 a、b、c、x、y、z 上只定义一次 f,然后以某种方式将 a、b、c “分配”给布尔常量。
我是 SMT 求解器的新手,占位符的想法可能完全无关紧要。其他解决方案也值得赞赏。
【问题讨论】: