我想在z3 :: expr对象上进行一些转换。如何在C ++ API中使用Z3_substitute_vars
,Z3_translate
和Z3_substitute_
?它们是用C#实现的,但我无法用C ++找到它们。很奇怪他们没有实施。
我尝试使用C api,但没有任何结果,这里有一个例子:
void substitute(){
z3::context c;
z3::expr a = c.int_const("a");
Z3_ast astA = a;
z3::expr plus = 2*a;
errs() << Z3_ast_to_string(c,plus);
z3::expr b = c.int_const("b");
Z3_ast astB = a;
z3::expr subs(c,Z3_substitute(c,plus,1,&astA,&astB));
errs() << Z3_ast_to_string(c,subs);
}
但a
没有被替换。我做错了吗?
答案 0 :(得分:2)
感谢您指出这些功能不存在。 C ++包装器增加了C API之外的便利性 为这些API函数添加便利性是合理的 因为你表明你正在使用它们。
C ++包装器仍然可以与基本C API一起使用。 因此,您可以调用函数,例如Z3_translate和Z3_substitute 使用C ++ API时。许多其他API函数也没有 存在于C ++包装器中,但是包含现有函数的方式 应该很好地了解如何调用剩余的函数。
以下是一些相关帖子:
答案 1 :(得分:1)
我相信你的例子有一个拼写错误:
Z3_ast astB = a;
尝试
Z3_ast astB = b;