Z3为意外的UNSAT提供了forall公式

时间:2016-09-03 15:44:37

标签: logic z3 z3py theorem-proving

我在下面有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,以给出满足hor子句的O == (x <= 6)的正确不变量。但是我一直在接受UNSAT。知道为什么吗?

1 个答案:

答案 0 :(得分:0)

约束条件不尽如人意。

你有一个Forall x形式的公式。并且(....,I == x) 最后一个结合意味着Forall x。我== x,哪个 因为我是从无数的数字中抽出来的,所以是不可能的 不是这个无限集中的每个x都等于I的情况。