【发布时间】:2016-11-24 16:11:18
【问题描述】:
我正在使用 c++ API。我创建了一个未解释的和该类型的术语 x、y 和 z。
z3::context ctx;
auto termSort = ctx.uninterpreted_sort("USORT");
auto x = ctx.constant("x", termSort);
auto y = ctx.constant("y", termSort);
auto z = ctx.constant("z", termSort);
solver s(ctx);
s.add(x == y);
s.add(y != z);
s.check();
auto model = s.get_model();
当我打印模型时,我得到以下内容,这实际上是打印出每个术语的内部代表。
x: USORT!val!0
y: USORT!val!0
z: USORT!val!1
我的问题是:我怎样才能快速从代表转为任期?我想要这样的功能:
repr_to_term(USORT!val!0) => [x, y]
repr_to_term(USORT!val!1) => [z]
Z3 API 中是否有类似的功能?或者是一种模仿它的方法?
在这个简单的例子中,我可以简单地遍历我的所有术语并构建一张从代表到术语的地图。但在我的实际情况中,我不想在每次生成模型时都遍历所有项,因为有很多项。
【问题讨论】: