Z3 为所有公式提供意外的 UNSAT

Z3 giving unexpected UNSAT for forall formulas

我有下面的 z3py 代码片段

I = Int('I')
x = Int('x')
a = Int('a')
O = Bool('O')
constraint1 = Implies(x==0,O)
constraint2 = Implies(And(x >= 6, O), x ==6)

test = And(constraint1,constraint2,(O == I <= a), I==x)
s = Solver()
s.add(ForAll([x],test))
result = s.check()
print result
if result == sat:
    print s.model()

它需要通过提供的一组连接来推断不变量O的正确性。在这种情况下,我提供了连接 I == x,因此 z3 所要做的就是猜测常量 a 为 6 以给出满足 horn 子句的 O == (x <= 6) 的正确不变量。但是我不断收到 UNSAT。知道为什么吗?

约束不满足。

您有一个 Forall x 形式的公式。和(....,我== x) 最后一个连词意味着 Forall x 。我 == x,哪个 是不满意的,因为我是从无限的数字集中抽取的,所以 并不是这个无限集合中的每个 x 都等于 I.