对Z3 bool变量的算术运算

时间:2015-10-28 22:24:31

标签: z3 boolean-logic sat

我在Z3中有一堆布尔变量,比如aibjck,以制定我的SAT问题。但是,在我的问题中,需要考虑三个算术约束:

a1 + a2 + a3 + ... + an = 1
b1 + b2 + b3 + ... + bn = 0
c1 + c2 + c3 + ... + cn <= 1

如何在不更改变量类型的情况下使用Z3 API制定这三个算术约束(即默认情况下为所有布尔值)?

1 个答案:

答案 0 :(得分:2)

您可以将布尔值嵌入到if表达式中,例如,您可以编写

  if(a1,1,0) + if(a2,1,2) + ...

作为一个特殊用途的功能,也可以输入 直接使用内置基数运算符的基数约束 此时来自C,.NET和Java API,但不是python或Ocaml。 此外,lia2pb策略转换使用if-then-else表达式的目标 (如上所述)并将它们转换为伪布尔约束。