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

How to simplify the union of two expressions: Z3 solver

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 求解器实现这个吗?

Link : http://rise4fun.com/Z3/1Xz3

Z3不支持这种简化。它不支持简化为"normal form"。回想一下 Z3 的主要接口是检查公式是可满足的还是不可满足的。 您可以向 SMT 求解器提出许多查询以提取等同于公式的连词,以防您能够确定应测试哪些文字是否属于连词。正如您的示例所建议的那样,这并不总是能够以句法方式进行。