包含约束

时间:2012-09-01 06:15:52

标签: z3

给出非负实数tSS, tLS, tIS, tBS。 (即它们是真实类型,tSS> = 0且tLS> = 0且tIS> = 0且tBS> = 0且tSS> = 0)

以下约束C1是CNF格式,包含12个合取。

(tSS+tLS<=tIS)And(tIS<=tBS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS+tLS<=tBS)And(tBS<=tIS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS+tLS<=tBS)And(tSS<=tIS)And(tIS<=tSS+tLS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS<=tIS)And(tIS<=tBS)And(tBS<=tSS+tLS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS+tLS<=tIS)And(tSS<=tBS)And(tBS<=tSS+tLS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS<=tBS)And(tBS<=tIS)And(tIS<=tSS+tLS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS+tLS<=tBS)And(tIS<=tSS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS<=tBS)And(tIS<=tBS)And(tBS<=tSS+tLS)And(tSS+tLS+tIS+tBS<=3) OR
(tIS<=tBS)And(tBS<=tSS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS+tLS<=tIS)And(tBS<=tSS)And(tSS+tLS+tIS+tBS<=3) OR
(tSS<=tIS)And(tBS<=tSS)And(tIS<=tSS+tLS)And(tSS+tLS+tIS+tBS<=3) OR
(tIS<=tSS)And(tBS<=tIS)And(tSS+tLS+tIS+tBS<=3)

我希望以

的形式获得约束C2
tSS<=a and tLS<=b and tIS<=c and tBS <=d and tSS<=e

约束C2只需要包含在C1中,即 任何满足C2的估值必须满足C1,但反之则不然。 a-e的值是从0到无穷大的值。 无穷大意味着它可以取任何大于0的值。

是否可以使用Z3来推断a-e的值? (这可能是不可满足的)

1 个答案:

答案 0 :(得分:2)

可能有更有效的技术可以做到这一点,但至少你可以使用量词来解决问题。

C1(tSS, tLS, tIS, tBS)表示CNF公式,C2(SS, tLS, tIS, tBS, a, b, c, d)是要满足的约束。您可以检查以下量化公式的可满足性:

forall tSS tLS tIS tBS. C2(SS, tLS, tIS, tBS, a, b, c, d) => C1(tSS, tLS, tIS, tBS)

其中a, b, c, d是自由变量。

我编写了具体的例子using Z3 SMT online。在这种情况下,查询是不可满足的。