我编写了一个程序,该程序自动生成smt2文件,并使用Z3 Java API解析该文件,解决约束并获取每个常量的赋值。
现在我在SMT2文件中有一些约束,这些约束是在位向量中指定的,并希望在解决SMT之后获取值。什么是从这些位向量获取值的正确Java API。
我尝试了model.getConstDecls()并使用Z3_sort_kind确定循环中每个常量的类型。看来我无法从位向量获得任何值。我注意到parseSMTLIB2File有所更改。这是我的示例代码:
FuncDecl c[] = model.getConstDecls();
for (int i=0;i<cons.length;i++){
Z3_sort_kind sort = c[i].getRange().getSortKind();
Expr expr = model.getConstInterp(c[i]);
if (expr.isBV())
//my own code to extract values from bit-vector.
}
似乎model.getConstDecls()没有得到任何位向量。我知道有一个JavaExample可以从位向量获取模型。但是,我不想重写该程序,因为它很大并且有其他东西。这将非常耗时。