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 []