我正在尝试在MacOS 64位上使用Scala ^ Z3,具有以下设置:
res0:String = Z3 4.0(build 0,rev.0),ScalaZ3 3.2.c(在开发中)
现在当我尝试从the ScalaZ3 main page执行fibonacci示例时,我得到以下输出,然后执行暂停:
fib0 ::: (= (fib!0 0) 0)
fib1 ::: (= (fib!0 1) 1)
fibN ::: (forall (k!0 Int)
(implies (> k!0 1) (= (fib!0 k!0) (+ (fib!0 (- k!0 1)) (fib!0 (- k!0 2)))))
:pat {(fib!0 k!0)})
Query ::: (= x (fib!0 1))
我等了几个小时,但没有更多的事情发生;) 有没有人有任何想法,我做错了什么? scala或z3的新版本? 问候, 弗洛里安
答案 0 :(得分:1)
(请注意,我们还没有机会用最新版本的Z3测试Scala ^ Z3。感谢您在这里破土动工。)
您尝试解决的问题包含通用量词并且令人满意。过去的Z3版本将以unknown
终止,您可以要求一个暂定模型(如您链接的文档页面所示)。很可能是因为新版本设置为非常难以反驳公式而不是返回unknown
,因此不会终止。
您可以尝试一个不可满足的查询,这应该更好。试试例如:
(= (fib 10) (fib 12))
Z3应该能够足够多次实例化量词,以得出公式不可满足的结论。