sol.shrink((Relation)rel, newLower, newUpper);
} else {
if (!(rel instanceof Relation)) continue;
// Retrieve the old value from the previous solution, and convert it to the new unverse.
// This should always work since the new universe is not yet solved, and so it should have all possible atoms.
TupleSet newLower = convert(factory, f), newUpper = newLower.clone();
// Bind the partial instance
for(Tuple t: sol.query(false, rel, false)) for(int i=0; i<t.arity(); i++) if (!oldAtoms.contains(t.atom(i))) { newLower.add(t); break; }
for(Tuple t: sol.query(true, rel, false)) for(int i=0; i<t.arity(); i++) if (!oldAtoms.contains(t.atom(i))) { newUpper.add(t); break; }
sol.shrink((Relation)rel, newLower, newUpper);
}