if (topVars.isEmpty()) return Ints.EMPTY_SET; // tried everything
final IntSet core = trace.core();
for(Iterator<Clause> iter = trace.iterator(core); iter.hasNext();) {
Clause clause = iter.next();
int maxVar = clause.maxVariable();
if (topVars.remove(maxVar)) {
// get all core clauses with the given maximum variable
IntSet exclude = coreClausesWithMaxVar(trace, maxVar);
assert !exclude.isEmpty();
// get all clauses reachable from the conflict clause