当model_completion设置为false时,Z3会返回什么?

时间:2014-05-05 17:07:17

标签: c++ c model z3

查询模型时model_completion设置为false Z3_model_eval:Z3会返回什么表示解释是“不关心”?

如果有人想建议:我猜它可能不是函数Z3_model_eval的返回值,因为z3++.h文件(C ++ API)包含这些行:

Z3_bool status = Z3_model_eval(ctx(), m_model, n, model_completion, &r);
check_error();
if (status == Z3_FALSE)
    throw exception("failed to evaluate expression");

一般来说:Z3如何表示模型中某个常量是“不关心”?

1 个答案:

答案 0 :(得分:1)

对于真正的无关紧要,模型不会分配任何值。因此,调用设置为eval的model_completion的Z3_model_evalfalse将保持原始常量不变,只替换为其分配模型值的那些(并且可能会简化表达式) 。这是一个例子:

context c;
expr e = c.int_const("x");

solver s(c);
s.add(e == e);
model m = s.get_model();

std::cout << m.eval(e, false) << std::endl;
std::cout << m.eval(e, true) << std::endl;

请注意,第一行输出打印x,即原始表达式未触及,而对model_completion设置为true的eval调用将打印0