我需要一个完整的SMTLIB2公式模型:
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 。
答案 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
生成解释。