此z3表达式有什么问题?
(declare-const arg_1 Int)
(assert
(and
(not (= 0 (mod arg_1 10)))
(= 0 (mod (+ 1 arg_1) 10))))
(check-sat)
(get-model)
尝试用z3
进行评估永远挂起。另一方面,如果我尝试以下任一方法,它将立即返回。
仅使用第一个表达式
(declare-const arg_1 Int)
(assert (not (= 0 (mod arg_1 10))))
(check-sat)
(get-model)
=> sat
(model
(define-fun arg_1 () Int
1)
)
仅使用第二个表达式
(declare-const arg_1 Int)
(assert (= 0 (mod (+ 1 arg_1) 10)))
(check-sat)
(get-model)
=> sat
(model
(define-fun arg_1 () Int
9)
)
将它们一起置入同一文件也将立即返回。
(declare-const arg_1 Int)
(declare-const arg_2 Int)
(assert (= 0 (mod (+ 1 arg_1) 10)))
(assert (not (= 0 (mod arg_2 10))))
;(assert (= arg_1 arg_2))
(check-sat)
(get-model)
=> sat
(model
(define-fun arg_2 () Int
1)
(define-fun arg_1 () Int
9)
)
但是,如果我取消注释arg_1 = arg_2
断言,它将挂起。
答案 0 :(得分:1)
这很可能是z3错误。如果使用z3 -v:3
运行原始文件,则会得到:
$ z3 -v:3 a.smt2
(smt.searching)
(smt.simplifying-clause-set :num-deleted-clauses 1)
final-check OPTIMAL
final-check OPTIMAL
...
并继续打印。我尝试使用cvc4,yices和mathsat;他们都立即解决了。您应该在https://github.com/Z3Prover/z3/issues进行举报,以便他们进行查看。