Z3可以为UF的无约束值输出“任何东西”吗?

时间:2013-03-13 15:06:06

标签: z3

在搜索过程中,某些未解释函数的值可以不受约束。例如,如果仅在smt查询中调用f(1),则f(2)f(3)可以是任何内容。有没有办法(某些选项可能)知道在解决过程中没有使用哪些值,因此可以是任何值?

1 个答案:

答案 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。在下一个版本中,选项按模块分组。