}
}
}
- //print debug
+ // print debug and verify types are correct
+ NodeManager* nm = NodeManager::currentNM();
for (std::pair<const Node, std::map<size_t, RDomain*> >& d : d_rel_doms)
{
Trace("rel-dom") << "Relevant domain for " << d.first << " : "
Trace("rel-dom") << "Dom( " << d.first << ", " << dd.first << " ) ";
}
Trace("rel-dom") << std::endl;
- if (Configuration::isAssertionBuild())
+ if (d.first.getKind() == FORALL)
{
- if (d.first.getKind() == FORALL)
+ TypeNode expectedType = d.first[0][dd.first].getType();
+ for (Node& t : r->d_terms)
{
- TypeNode expectedType = d.first[0][dd.first].getType();
- for (const Node& t : r->d_terms)
+ TypeNode tt = t.getType();
+ if (tt != expectedType)
{
- if (t.getType() != expectedType)
+ // Computation may merge Int with Real due to inequalities. We
+ // correct this here.
+ if (tt.isInteger() && expectedType.isReal())
+ {
+ t = nm->mkNode(TO_REAL, t);
+ }
+ else
{
- Unhandled() << "Relevant domain: bad type " << t.getType()
- << ", expected " << expectedType;
+ Assert(false) << "Relevant domain: bad type " << t.getType()
+ << ", expected " << expectedType;
}
}
}
regress0/quantifiers/issue8227-subs-shadow.smt2
regress0/quantifiers/issue8466-syqi-bool.smt2
regress0/quantifiers/issue8609-subtype-assert.smt2
+ regress0/quantifiers/issue8821-enum-interleave-types.smt2
regress0/quantifiers/lra-triv-gn.smt2
regress0/quantifiers/macro-back-subs-sat.smt2
regress0/quantifiers/macros-int-real.smt2