Datatypes lemmas: share only external types (#5997)
authoryoni206 <yoni206@users.noreply.github.com>
Thu, 25 Feb 2021 20:36:05 +0000 (12:36 -0800)
committerGitHub <noreply@github.com>
Thu, 25 Feb 2021 20:36:05 +0000 (14:36 -0600)
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.

src/theory/datatypes/theory_datatypes.cpp

index 9d3b5a143ab80f04a6fc3f7702e05e63c3ed34f3..45787ee04c34ffc9b4dcef82f74ea3ab287927a5 100644 (file)
@@ -1562,11 +1562,15 @@ void TheoryDatatypes::instantiate( EqcInfo* eqc, Node n ){
   // 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);