z3 SMT和python的区别

时间:2015-01-08 13:56:13

标签: z3 z3py

我的问题是,"区别"在z3 python中工作?我已经比较了以下代码,它似乎没有给出相同的结果:

(declare-const x Int)
(declare-const y Int)
(assert (distinct x y))
(check-sat)
(get-model)

结果是:

sat

  (model 
  (define-fun y () Int
    0)
  (define-fun x () Int
    1)
  )

我为测试添加了否定断言,结果是不正确的,这是正确的:

(assert (= x y))

unsat
Z3(6, 10): ERROR: model is not available

但是当我在python中使用z3时,它总是如下所示:

x = Int('x')
y = Int('y')
Distinct(x, y)
s = Solver
s = Solver() 
s.check()

当我添加以下断言它应该给我不满但它返回sat:

s.add(x == y)
[y = 0, x = 0]

这是否意味着我使用了错误的语法?

1 个答案:

答案 0 :(得分:4)

`Distinct'函数只创建一个术语,它不会将自己添加到求解器中。这是一个适合我的例子:

x = Int('x')
y = Int('y')
d = Distinct(x, y)

s = Solver()
s.add(d) # SAT without this one, UNSAT with
s.add(x == y)
print s
print s.check()