【发布时间】:2014-06-16 22:02:42
【问题描述】:
我正在编写一些代码来为 Z3 生成约束,然后求解结果。我可以通过命令Z3_model_to_string(ctx,m) 打印出结果,结果显示x1-> 1 x2->100 其中x1 和x2 都是int。我的问题是如何将这些整数值保存到 C++ 变量中以供将来分析?
这是我为 Z3 编写的部分代码
Z3_model m;
context ctx;
Z3_ast fs;
string str = "(declare-const x1 Int) (assert (> x1 0)) (declare-const x2 Int) (assert (not (< x2 100)))" //Generated by some other function
fs = Z3_parse_smtlib2_string(Z3_context(ctx), str, 0, 0, 0, 0, 0, 0);
Z3_assert_cnstr(Z3_context(ctx), fs);
Z3_lbool result = Z3_check_and_get_model(Z3_context(ctx), &m);
switch (result) {
case Z3_L_FALSE:
printf("unsat\n");
break;
case Z3_L_UNDEF:
printf("unknown\n");
printf("potential model:\n%s\n", Z3_model_to_string(Z3_context(ctx), m));
break;
case Z3_L_TRUE:
printf("sat\n%s\n", Z3_model_to_string(Z3_context(ctx), m));
break;
}
int num_constants = Z3_get_model_num_constants(Z3_context(ctx), m);
model aaa(ctx,m);
for (i = 0; i< num_constants; i++) {
z3::expr r = aaa.get_const_interp(aaa.get_func_decl(i));
}
【问题讨论】: