给出非负实数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)
我希望以
的形式获得约束C2tSS<=a and tLS<=b and tIS<=c and tBS <=d and tSS<=e
约束C2只需要包含在C1中,即 任何满足C2的估值必须满足C1,但反之则不然。 a-e的值是从0到无穷大的值。 无穷大意味着它可以取任何大于0的值。
是否可以使用Z3来推断a-e的值? (这可能是不可满足的)
答案 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。在这种情况下,查询是不可满足的。