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.
我有下面的 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.