我应该何时内部化表达式?

时间:2019-04-10 09:11:37

标签: z3

我正在尝试为z3编写自定义字符串理论。我遇到的一个问题是z3中的内部化概念。

如果在将表达式(或文字)添加为公理之前未对其进行内部化,则有时会出现异常,但有时不会。

例如,在以下来自theory_seq.cpp的代码中

    VERIFY(m_util.str.is_index(i, t, s) ||
           m_util.str.is_index(i, t, s, offset));
    expr_ref minus_one(m_autil.mk_int(-1), m);

    literal cnt = mk_literal(m_util.str.mk_contains(t, s));
    literal i_eq_m1 = mk_eq(i, minus_one, false);
    add_axiom(cnt,  i_eq_m1);

它没有将i_eq_m1内部化,并且似乎工作正常。

但是如果我不对任何表达式进行内部化(例如,删除对ctx.internalize(e,false)的所有调用),我将得到一些例外。

从现有表达式创建新表达式时,有什么原则可遵循?

0 个答案:

没有答案