Z3 4.0:获得完整的模型

时间:2012-06-20 07:45:30

标签: z3

我需要一个完整的SMTLIB2公式模型:

http://pastebin.com/KiwFJTrK

Z3(版本3.2和4.0)返回所有变量的值,但不返回 var4 的值。我尝试了一些配置设置,如

MODEL_COMPLETION = true 

但它似乎没有用。有人有建议吗?相比之下CVC3返回一个模型(包括var4),因此它不是SMTLIB或我的例子的问题。

我需要这个的原因解释为here in detail。简而言之:我想使用C API进行增量求解。出于这个原因,我必须多次使用函数 Z3_parse_smtlib2_string 。此函数需要先前声明的函数和常量作为参数。我无法通过 Z3_get_smtlib_decl 获取此信息,因为这些函数仅在调用 z3_parse_smtlib_string 时起作用,而不是 Z3_parse_smtlib2_string

1 个答案:

答案 0 :(得分:3)

您可以通过在脚本开头添加以下选项来避免此问题。

(set-option :auto-config false)

我将在下一个版本中修复它。 这是对正在发生的事情的简短解释。 Z3有一个0-1整数问题的求解器。在预处理之后,您的脚本被Z3标记为0-1整数问题。当问题被视为0-1问题时,var4的值是“不关心”,但当问题被视为整数问题时,它不是“不关心”(var4 { {1}}必须为0或1)。默认情况下,Z3不会显示“不关心”变量的值。

当您请求未包含在模型中的常量值时,MODEL_COMPLETION=true将完成模型。例如,如果我们执行(eval var4),Z3将为var4生成解释。