const DType& dt = tn.getDType();
for (unsigned i = 0, ncons = dt.getNumConstructors(); i < ncons; i++)
{
- for (unsigned j = 0, nargs = dt[i].getNumArgs(); j < nargs; j++)
+ // get the constructor type
+ TypeNode consType;
+ if (dt.isParametric())
+ {
+ // if parametric, must instantiate the argument types
+ consType = dt[i].getSpecializedConstructorType(tn);
+ }
+ else
+ {
+ consType = dt[i].getConstructor().getType();
+ }
+ for (const TypeNode& crange : consType)
{
- TypeNode crange = dt[i].getArgType(j);
CegHandledStatus cret = isCbqiSort(crange, visited, qe);
if (cret == CEG_UNHANDLED)
{
+ Trace("cegqi-debug2")
+ << "Non-cbqi sort : " << tn << " due to " << crange << std::endl;
visited[tn] = CEG_UNHANDLED;
return CEG_UNHANDLED;
}
regress0/quantifiers/cbqi-lia-dt-simp.smt2
regress0/quantifiers/cegqi-nl-simp.cvc
regress0/quantifiers/cegqi-nl-sq.smt2
+ regress0/quantifiers/cegqi-par-dt-simple.smt2
regress0/quantifiers/clock-10.smt2
regress0/quantifiers/clock-3.smt2
regress0/quantifiers/cond-var-elim-binary.smt2
--- /dev/null
+; EXPECT: unsat
+(set-logic ALL)
+(declare-datatype List (par (T) ((nil) (cons (head T) (tail (List T))))))
+
+(declare-const x (List Int))
+(assert (not (exists ((y (List Int))) (= x (tail y)))))
+(check-sat)