为什么Z3对以下输入没有回应?

时间:2014-06-11 22:10:23

标签: z3

我最初发布的问题如虚线下方所示,但从那以后我有一个更简单的例子:

(declare-fun f (Int) Int)
(assert (= (f 10) 1))
(check-sat)
(get-model)

按预期产生f的解释。然而,将常数更改为10以外的任何值,并且Z3只旋转箭头几次,但随后不打印任何内容!

---------------------------------------原始问题------ -----------------------

我在以下输入上尝试了Z3,箭头转了几圈然后停止,但是Z3打印或什么也没说。为什么呢?

(declare-fun f (Int Int) Int)
(assert (>= (f 1 1) 1)) 
(assert (>= (f 1 2) 2))
(assert (>= (f 2 1) 2))
(assert (>= (f 2 2) 2))
(assert (= (f 1 1) 1))
(assert (= (f 2 2) 2))
(assert (or (= (f 1 2) 1)  (= (f 1 2) 2)))
(assert (or (= (f 2 1) 1)  (= (f 2 1) 2)))
(check-sat)
(get-model)

我觉得我错过了一些非常明显的东西......

2 个答案:

答案 0 :(得分:1)

我正在获得(使用iZ3,Z3不稳定分支)

sat 
(model 
  (define-fun f ((x!1 Int) (x!2 Int)) Int 
    (ite (and (= x!1 1) (= x!2 1)) 1 
    (ite (and (= x!1 2) (= x!2 2)) 2 
    (ite (and (= x!1 1) (= x!2 2)) 2 
    (ite (and (= x!1 2) (= x!2 1)) 2 2))))) 
 )

在线here

运行此示例

答案 1 :(得分:1)

我认为你在rise4fun上使用Z3?在那里运行的版本可能有点过时。我们必须在那里手动更新二进制文件。如果它没有回复,则要么是因为它超时,要么是因为存在其他问题(例如,段错误)。在rise4fun上的版本很可能会出现一些已经在其他版本的Z3中修复的错误(例如,不稳定,iZ3等)。