z3获取符号变量C ++ API的大小

时间:2016-05-18 21:12:30

标签: c++ api z3 smt

我正在使用Z3_parse_smtlib2_string来解析smtlib2公式。公式看起来像:

(set-logic QF_AUFBV)(declare-fun SymVar_0 () (_ BitVec 32))(declare-fun SymVar_1 () (_ BitVec 8))...

我使用以下方法解析它:

Z3_ast ast = Z3_parse_smtlib2_string(ctx, (Z3_string)formula, 0, 0, 0, 0, 0, 0);

我想现在想要获得SymVar_0的大小(它应该返回32)。我怎么能这样做?

谢谢

1 个答案:

答案 0 :(得分:1)

名为Z3_get_bv_sort_size的函数应该完成这项工作。请注意,这是一个C(而不是C ++)函数,因此您还必须提供上下文。

为了其他面临类似问题的用户的利益:Z3中没有符号表可以让您查找名称类型。您可以通过遍历所有子表达式并记录所有符号及其遇到的类型来自己创建一个。有关Python中的示例,请参阅Z3py: how to get the list of variables from a formula?