Z3在执行期间添加新变量

时间:2013-06-19 08:34:08

标签: z3

我正在尝试为Z3添加新功能。 此功能要求我在执行期间和预处理之后添加新的松弛变量。 我找不到合适的方法,我担心尝试通过添加新列强制它会“破坏”解算器。

是否有共同推荐的方法来做到这一点?

谢谢, 奥马尔

1 个答案:

答案 0 :(得分:2)

您可以在文件src/smt/theory_arith_int.h中找到一个示例,方法:mk_gomory_cut。 在此方法的最后,创建一个新的多项式约束,并将其存储在变量bound中。然后,以下代码用于“内化”约束:

    literal l     = null_literal;
    context & ctx = get_context();
    ctx.internalize(bound, true);
    l = ctx.get_literal(bound);

方法internalize将回调理论_arith,并创建一个新的松弛。 备注:方法internalize假设存储在bound中的多项式约束是简化形式。