不良核心轨道的SMT-LIB v2格式的命名术语列表

时间:2013-03-23 15:59:29

标签: z3

如何使用z3 api录制或打印出名称列表中的术语,例如“a_ uc _1”和名单数量?

1 个答案:

答案 0 :(得分:0)

不幸的是,没有用于执行所需操作的API。此信息在内部可用,但未在API中公开。 更改Z3代码以提取此信息并不困难。 在内部,以下函数用于解析SMT-LIB v2文件。

bool parse_smt2_commands(cmd_context & ctx, 
                         std::istream & is, 
                         bool interactive = false, 
                         params_ref const & p = params_ref());

它在文件src/parsers/smt2/smt2parser.h中定义。

cmd_context对象在对象src/cmd_context/cmd_context.h中定义。

它有以下方法:

ptr_vector<expr>::const_iterator begin_assertion_names() const;
ptr_vector<expr>::const_iterator end_assertion_names() const;

这两个方法可用于遍历用于在SMT-LIB v2文件中命名断言的所有名称。每个名称在内部表示为布尔变量。 如果ctxcmd_context,我们可以使用以下代码遍历所有名称:

ptr_vector<expr>::const_iterator it = ctx.begin_assertion_names();
for (; it != ctx.end_assertion_names(); it++) {
   expr * n = *it;
   // do something
   // here, we just print the name
   std::cout << to_app(n)->get_decl()->get_name() << "\n";
}