在搜索过程中,某些未解释函数的值可以不受约束。例如,如果仅在smt查询中调用f(1)
,则f(2)
,f(3)
可以是任何内容。有没有办法(某些选项可能)知道在解决过程中没有使用哪些值,因此可以是任何值?
答案 0 :(得分:3)
对于量词免费问题,您可以使用:model-partial
选项true
来实现。
这是一个示例(也可用here):
(set-option :model-partial true)
(declare-fun f (Int) Int)
(assert (> (f 0) 0))
(assert (< (f 1) 0))
(check-sat)
(get-model)
在这个例子中,我们得到输出:
sat
(model
(define-fun f ((x!1 Int)) Int
(ite (= x!1 0) 1
(ite (= x!1 1) (- 1)
#unspecified)))
)
BTW,在下一个版本(Z3 4.3.2)中,此选项重命名为:model.partial
。在下一个版本中,选项按模块分组。