case kind::COMBINED_CARDINALITY_CONSTRAINT:
//do nothing
break;
+ case kind::UNINTERPRETED_CONSTANT:
+ {
+ // Uninterpreted constants should only appear in models, and should
+ // never appear in constraints. They are unallowed to ever appear in
+ // constraints since the cardinality of an uninterpreted sort may have
+ // an upper bound, e.g. if (forall ((x U) (y U)) (= x y)) holds, then
+ // @uc_U_2 is a ill-formed term, as its existence cannot be assumed.
+ // The parser prevents the user from ever constructing uninterpreted
+ // constants. However, they may be exported via models to API users.
+ // It is thus possible that these uninterpreted constants are asserted
+ // back in constraints, hence this check is necessary.
+ throw LogicException(
+ "An uninterpreted constant was preregistered to the UF theory.");
+ }
+ break;
default:
// Variables etc
d_equalityEngine->addTerm(node);