let fuse apply (y, b) sl = 
    List.fold_right
      (fun (x, c) acc ->
         let c' = apply (y, b) c in
           if eq x c' then acc else
             (x, c') :: acc)
      sl []