因此,我可以使用在表示量词的表达式上调用的Z3_get_quantifier_bound_name来获取与量词边界相关联的名称。但是假设我正在遍历量化子公式的AST。是否可以在该点访问索引的名称? 谢谢。
if (z3_expr.is_var())
{
// is it possible at this point to get the name of the quantified variable,
// which was associated with it at quantifier creation?
}
答案 0 :(得分:1)
作为变量的表达式没有与它们直接关联的名称。 我们访问名称的方法是通过维护一堆名称来实现 在路上走过的量词。 因此,维护符号的向量(堆栈/列表),无论何时 遍历量词器将量词的绑定名称推送到向量上。 遍历量词后,您必须弹出名称。
使用以下API访问绑定变量的名称:
unsigned Z3_API Z3_get_quantifier_num_bound(__in Z3_context c, __in Z3_ast a);
Z3_symbol Z3_API Z3_get_quantifier_bound_name(__in Z3_context c, __in Z3_ast a, unsigned i);
请注意,量化变量的索引从右到左排序。 所以如果Z3_get_quantifier_num_bound(context,expr)返回2,和 x = Z3_get_quantifier_bound_name(context,expr,0) y = Z3_get_quantifier_bound_name(context,expr,1) 那么y的索引为0,x的索引为1。