annotated.node().accept(flat);
final List<Formula> roots = new ArrayList<Formula>(flat.conjuncts.size());
roots.addAll(flat.conjuncts.keySet());
for(Iterator<Map.Entry<Formula,Node>> itr = flat.conjuncts.entrySet().iterator(); itr.hasNext(); ) {
final Map.Entry<Formula, Node> entry = itr.next();
final Node source = annotated.sourceOf(entry.getValue());
if (entry.getKey()==source) { itr.remove(); }
else { entry.setValue(source); }
}
return AnnotatedNode.annotate(Formula.and(roots), flat.conjuncts);
}