如何简化两个表达式的并集:Z3求解器

时间:2015-10-06 11:17:51

标签: union z3 smt simplification

SMT求解器产生的结果是:

(or (and (>= c1 2) (<= c1 4) (= (+ c0 c1 c2) 5) (= (+ c0 c1) 4))
    (and (>= c1 1) (<= c1 3) (= (+ c0 c1 c2) 5) (= (+ c0 c1) 4)))

但我期待的是:

(and (>= c1 1) (<= c1 4) (= (+ c0 c1 c2) 5) (= (+ c0 c1) 4)

有人可以指导我用Z3求解器实现这个目标吗?

链接:http://rise4fun.com/Z3/1Xz3

1 个答案:

答案 0 :(得分:2)

Z3不支持这种简化。它不支持简化为“正常形式”。回想一下,Z3的主要接口是检查公式是否可满足或不可满足。 您可以向SMT求解器提出许多查询,以提取一个等同于公式的连接,以防您能够识别应该在连接中测试哪些文字的成员资格。正如您的示例所示,这并不总是以语法方式进行。