我正在使用z3的python接口,并具有一组约束。尽管我已经用implify(a, *arguments, **keywords)
分别简化了它们,但我想简化一组约束,以便消除重复项,其他约束所覆盖的约束或从更具体的约束中生成更一般的约束。
用非z3正弦写;) [a> 0,a == 1]-> [a == 1] [not(a == 1),not(a == 2),not(a == 3),a == 4]-> [a == 4]
直到现在,我只看到了为检查满意度或返回某些变量赋值的函数提供约束集的可能性,但是没有提供最小约束集或减少约束集(如果不能保证最小约束集)的可能性。
一种解决方案是将它们连接为一个单一的约束:[c1,c2,c3]-> and(and(and(c1,c2),c3)。这可以通过简化单个约束来解决,然后通过消除或分解和将结果再次拆分为多个约束。
但是如果z3提供了简化一组约束的可能性,那就更好了。