查询模型时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如何表示模型中某个常量是“不关心”?
答案 0 :(得分:1)
对于真正的无关紧要,模型不会分配任何值。因此,调用设置为eval
的model_completion的Z3_model_eval
或false
将保持原始常量不变,只替换为其分配模型值的那些(并且可能会简化表达式) 。这是一个例子:
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
。