【问题标题】:z3 getting the size of a symbolic variable C++ APIz3 获取符号变量 C++ API 的大小
【发布时间】:2016-09-15 13:31:45
【问题描述】:

我正在使用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)。我该怎么做?

谢谢

【问题讨论】:

    标签: c++ api z3 smt


    【解决方案1】:

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

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

    【讨论】:

    • 如何指定我想要名称为 SymVar_0 的符号变量的大小而不是其他变量的大小?
    • 首选方法是事先在表达式中包含该常量。由于没有符号表,你无法查找常量,但你可以通过知道变量的名称和类型来“作弊”;这允许您通过 mk_const 构造相同的表达式,但它只有在您获得名称并正确排序时才有效。
    • 给定一些 BV 类型,Z3_get_bv_sort_size(ctx, TYPE));您需要知道变量的名称和类型,因此您可以在它们上调用函数。
    猜你喜欢
    • 1970-01-01
    • 2014-06-06
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-18
    • 1970-01-01
    相关资源
    最近更新 更多