Caused by 2 rewrite steps (conditional splitting and extended rewriting) being inverses of each other when miniscoping is disabled.
Fixes the third benchmark on #8159.
}
Trace("cond-var-split-debug")
<< "Conditional var elim split " << body << "?" << std::endl;
+ // we only do this splitting if miniscoping is enabled, as this is
+ // required to eliminate variables in conjuncts below
+ if (!d_opts.quantifiers.miniscopeQuant)
+ {
+ return body;
+ }
if (bk == ITE
|| (bk == EQUAL && body[0].getType().isBoolean()
COMPUTE_MINISCOPING,
/** Aggressive miniscoping */
COMPUTE_AGGRESSIVE_MINISCOPING,
- /** Apply the extended rewriter to quantified formula bodies */
- COMPUTE_EXT_REWRITE,
/**
* Term processing (e.g. simplifying terms based on ITE lifting,
* eliminating extended arithmetic symbols).
COMPUTE_VAR_ELIMINATION,
/** Conditional splitting */
COMPUTE_COND_SPLIT,
+ /**
+ * Apply the extended rewriter to quantified formula bodies. This step
+ * must come last, since it may invert other steps above, e.g. conditional
+ * splitting.
+ */
+ COMPUTE_EXT_REWRITE,
/** Placeholder for end of steps */
COMPUTE_LAST
};
regress0/quantifiers/issue6999-deq-elim.smt2
regress0/quantifiers/issue7353-var-elim-par-dt.smt2
regress0/quantifiers/issue8001-mem-leak.smt2
+ regress0/quantifiers/issue8159-3-qext-nterm.smt2
regress0/quantifiers/lra-triv-gn.smt2
regress0/quantifiers/macro-back-subs-sat.smt2
regress0/quantifiers/macros-int-real.smt2
--- /dev/null
+; COMMAND-LINE: --no-debug-check-models
+; EXPECT: sat
+(set-logic NIA)
+(set-option :ext-rewrite-quant true)
+(set-info :status sat)
+(declare-fun v4 () Bool)
+(declare-fun v92 () Bool)
+(assert (forall ((q688 Bool)) (or v4 (and v92 q688))))
+(check-sat)