let rec merge_exp tas = function
| (t,si)::suite ->
let e = (t, exp_inverse si) in
let rec g pile = function
| e2::suite -> if e = e2 then merge suite pile else g (e2::pile) suite
| [] -> (t,si)::(List.rev tas)
in merge_exp (g [] tas) suite
| [] -> tas