let compose i s r =
  Trace.msg (Th.to_string i) "Compose" r (Pretty.list Fact.pp_equal);
  let (changed', eqs', s') = fuse i s r in
  let changed = ref changed' in
  let eqs = ref eqs' in
  let s'' = List.fold_right (update (changed, eqs) i) r s' 
  in
    (!changed, !eqs, s'')