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

z3 getting the size of a symbolic variable C++ API

我正在使用 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 的大小(它应该 return 32)。我该怎么做?

谢谢

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

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