我最初发布的问题如虚线下方所示,但从那以后我有一个更简单的例子:
(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)
我觉得我错过了一些非常明显的东西......
答案 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等)。