我正在尝试为Z3添加新功能。 此功能要求我在执行期间和预处理之后添加新的松弛变量。 我找不到合适的方法,我担心尝试通过添加新列强制它会“破坏”解算器。
是否有共同推荐的方法来做到这一点?
谢谢, 奥马尔
答案 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
中的多项式约束是简化形式。