Z3 如何转换变量';模型中的int值是多少?

Z3 如何转换变量';模型中的int值是多少?,z3,Z3,使用模型对象时,我调用func\u decl get\u func\u decl(无符号I)来获取分配给某个函数(变量)的值。我遇到的问题是将其输出(这是一个func_decl)转换为int 例如,如果模型是{x |->4,y |->12,z |->6},我想得到这3个变量(4,12和6)的实际int值。Z3提供了函数Z3\u get\u numerium,用于此目的: Z3_bool Z3_API Z3_get_numeral_int(__in Z3_context c, __in Z3_as

使用模型对象时,我调用
func\u decl get\u func\u decl(无符号I)
来获取分配给某个函数(变量)的值。我遇到的问题是将其输出(这是一个
func_decl
)转换为
int


例如,如果模型是
{x |->4,y |->12,z |->6}
,我想得到这3个变量(
4
12
6
)的实际
int
值。

Z3提供了函数
Z3\u get\u numerium
,用于此目的:

Z3_bool Z3_API Z3_get_numeral_int(__in Z3_context c, __in Z3_ast v, __out int* i);
请注意,最后一个参数是指向一个整数的点,如果调用成功,该整数将被正确的值填充(对于非数字或不能表示为int的数字,它将失败)

还有其他名为
Z3\u get\u numeric.*
的函数,用于获取不同类型的值,例如uint64等

此方法适用于常量(即,算术为0的func_decls)。要获取(非零arity)函数定义的条目,应使用以下函数:

Z3_func_entry Z3_API Z3_func_interp_get_entry(__in Z3_context c, __in Z3_func_interp f, unsigned i);
你可以看到这个问题: