Node scr = utils::mkCodeRange(s, d_cardSize);
Node tcr = utils::mkCodeRange(t, d_cardSize);
Node conc = nm->mkNode(OR, scr.notNode(), tcr.notNode());
+ // We do not explain exp for two reasons. First, we are
+ // caching this inference based on the user context and thus
+ // it should not depend on the current explanation. Second,
+ // s or t may be concrete integers corresponding to code
+ // points of string constants, and thus are not guaranteed to
+ // be terms in the equality engine.
d_im.sendInference(
- exp, conc, InferenceId::STRINGS_UNIT_INJ_OOB);
+ exp, exp, conc, InferenceId::STRINGS_UNIT_INJ_OOB);
}
}
else
void EqualityEngine::explainLit(TNode lit, std::vector<TNode>& assumptions)
{
+ Trace("eq-exp") << "explainLit: " << lit << std::endl;
Assert(lit.getKind() != kind::AND);
bool polarity = lit.getKind() != kind::NOT;
TNode atom = polarity ? lit : lit[0];
regress1/strings/issue8347-has-skolem.smt2
regress1/strings/issue8434-nterm-str-rw.smt2
regress1/strings/issue8890-inj-oob.smt2
+ regress1/strings/issue8906-oob-exp.smt2
regress1/strings/kaluza-fl.smt2
regress1/strings/loop002.smt2
regress1/strings/loop003.smt2