在Z3Py中检索枚举类型的值

时间:2013-01-07 16:33:48

标签: python z3

如何检索枚举变量v的值?例如,

vTyp, (val1,val2,val3) = EnumSort('vTyp',['val1','val2','val3'])
v = Const('my variable',vTyp)

现在,如果只是上面的变量v,我将如何检索[val1,val2,val3]的值v列表(其中val1,val3,val3为表达式如上)?

我尝试了[v.sort().constructor(0), ...(1), ...(2)],但构造函数方法没有返回表达式。

1 个答案:

答案 0 :(得分:3)

表达式v.sort().constructor(0)返回Z3函数声明。在Z3中,常量是具有0个参数的函数。要在常量表达式中转换声明,我们应该使用v.sort().constructor(0)()

BTW,函数is_func_decl可用于测试对象是否是Z3函数声明。函数is_expr与Z3表达式等效。

print is_func_decl(v.sort().constructor(0))
print is_expr(v.sort().constructor(0))
print is_expr(v.sort().constructor(0)())