在s.get_model()之后从模型中获取整数

时间:2013-08-14 01:38:48

标签: c++ z3

Z3的C ++ API 中,我可以通过

搜索模型
model m = s.get_model();

然后:

cout << m.eval(A);

会给我A的价值。

但是,m.eval(A)返回一个expr对象,但我希望将A的值存储为程序中的整数。如何将expr转换为int?

3 个答案:

答案 0 :(得分:1)

C API公开了从整数表达式中检索整数值的方法。 最通用的API是:

/**
   \brief Return numeral value, as a string of a numeric constant term
   \pre Z3_get_ast_kind(c, a) == Z3_NUMERAL_AST
   def_API('Z3_get_numeral_string', STRING, (_in(CONTEXT), _in(AST)))
*/

Z3_string Z3_API Z3_get_numeral_string(__in Z3_context c, __in Z3_ast a);

返回stringchar*)。这允许返回bignums(不符合64位的数字) Z3为特殊情况公开了一组其他Z3_get_numeral变体。这些内容记录在z3_api.h中,或者参见:http://research.microsoft.com/en-us/um/redmond/projects/z3/code/group__capi.html

答案 1 :(得分:1)

此问题已经出现过;也许这些有助于澄清:Q1 Q2

答案 2 :(得分:0)

使用Z3py的可能示例

x= Int('x')
s = Solver()
s.add(x + 3 == 5)
print s.check()
m = s.model()
print m
y = (m.evaluate(x))
z = y + 4
print simplify(z)

输出:

sat
[x = 2]
6