EqcInfo* eb)
{
Assert(eb != nullptr && ea != nullptr);
- Assert(a.getType() == b.getType())
+ Assert(a.getType().isComparableTo(b.getType()))
<< "bad types for merge " << a << ", " << b;
- Assert(a.getType().isStringLike() || a.getType().isInteger());
+ // usages of isRealOrInt are only due to subtyping, where seq.nth for
+ // sequences of Real are merged to integer equivalence classes
+ Assert(a.getType().isStringLike() || a.getType().isRealOrInt());
// check prefix, suffix
for (size_t i = 0; i < 2; i++)
{
Assert(e != nullptr);
Assert(!t.isNull());
Node tb = t.isConst() ? t : getBoundForLength(t, isLower);
- Assert(!tb.isNull() && tb.isConst() && tb.getType().isInteger())
+ Assert(!tb.isNull() && tb.isConst() && tb.getType().isRealOrInt())
<< "Unexpected bound " << tb << " from " << t;
Rational br = tb.getConst<Rational>();
Node prev = isLower ? e->d_firstBound : e->d_secondBound;
{
// convert to bound
Node prevb = prev.isConst() ? prev : getBoundForLength(prev, isLower);
- Assert(!prevb.isNull() && prevb.isConst() && prevb.getType().isInteger());
+ Assert(!prevb.isNull() && prevb.isConst() && prevb.getType().isRealOrInt());
Rational prevbr = prevb.getConst<Rational>();
if (prevbr == br || (br < prevbr) == isLower)
{
// are we in conflict?
Node prevob = prevo.isConst() ? prevo : getBoundForLength(prevo, !isLower);
Assert(!prevob.isNull() && prevob.isConst()
- && prevob.getType().isInteger());
+ && prevob.getType().isRealOrInt());
Rational prevobr = prevob.getConst<Rational>();
if (prevobr != br && (prevobr < br) == isLower)
{
regress1/strings/proj254-re-elim-agg.smt2
regress1/strings/proj-issue281.smt2
regress1/strings/proj-issue331.smt2
+ regress1/strings/proj-issue502-merge-type.smt2
regress1/strings/query4674.smt2
regress1/strings/query8485.smt2
regress1/strings/re-all-char-hard.smt2