我使用z3 c ++ api。我在expr_vector1中从exprs创建一个副本并将它们存储在新的expr_vector2中,然后调用
for(unsigned j = 0; j < exprs_vector1.size();++j){
expr v = exprs_vector1[j];
uint32_t size; // it is initialized somehow.
std::stringstream name;
name << v <<"_"<< i;
expr var(ctx);
if(v.is_bool())
var = sctx->ctx.bool_const(name.str().c_str());
else if(v.is_bv())
var = sctx->ctx.bv_const(name.str().c_str(), size);
exprs_vector2.push_back(var);
}
formula.substitute( expr_vactor1, expr_vector2); // this line causes error
但是我收到消息“类型错误”的z3异常。 请注意,这两个向量具有相同的大小,并且它们的表达式相应地具有相同的排序,并且exprs是bool或bitvector的一种。我猜不出这件事的原因。 vector1的内容:
|!POPCNT :: I 0 @ 1#1_1 |
在vector2中我们有:
| \ |!POPCNT :: I 0 @ 1#1_1 \ | _1 |
以上两个表达式都是bitvector32。
该公式没有expr_vector1的任何表达式,这可能是此异常的原因吗?