Forcing lemmas in datatypes used to be done only for external types.
This was changed to consider all types, which is not needed.
This PR brings back the restriction to external types.
// may contribute to conflicts due to cardinality (good examples of this are
// regress0/datatypes/dt-param-card4-bool-sat.smt2 and
// regress0/datatypes/list-bool.smt2).
- bool forceLemma = true;
+ bool forceLemma;
if (options::dtPoliteOptimize())
{
forceLemma = dt[index].hasFiniteExternalArgType(ttn);
}
+ else
+ {
+ forceLemma = dt.involvesExternalType();
+ }
Trace("datatypes-infer-debug") << "DtInstantiate : " << eqc << " " << eq
<< " forceLemma = " << forceLemma << std::endl;
d_im.addPendingInference(eq, InferenceId::DATATYPES_INST, exp, forceLemma);