Fixes a solution soundness issue caused by allowing ineligible terms of kind BOOLEAN_TERM_VARIABLE to appear in instantiations.
This also corrects the expected solution on a benchmark that had an incorrect status.
Fixes #6603.
bool CegInstantiator::isEligibleForInstantiation(Node n) const
{
- if (n.getKind() != INST_CONSTANT && n.getKind() != SKOLEM)
+ Kind nk = n.getKind();
+ if (nk != INST_CONSTANT && nk != SKOLEM && nk != BOOLEAN_TERM_VARIABLE)
{
return true;
}
regress0/quantifiers/issue4576.smt2
regress0/quantifiers/issue5645-dt-cm-spurious.smt2
regress0/quantifiers/issue5693-prenex.smt2
+ regress0/quantifiers/issue6603-dt-bool-cegqi.smt2
regress0/quantifiers/lra-triv-gn.smt2
regress0/quantifiers/macro-back-subs-sat.smt2
regress0/quantifiers/macros-int-real.smt2
(set-logic ALL)
-(set-info :status sat)
+(set-info :status unsat)
(declare-datatypes ((Enum1 0)) (((None) (cons (data Bool)))))
(assert (forall ((var_1 Enum1)) (data var_1)))
(check-sat)
--- /dev/null
+(set-logic ALL)
+(set-info :status unsat)
+(declare-datatypes ((E 0)) (((c (a Bool)))))
+(assert (forall ((v E)) (a v)))
+(check-sat)