let rec add_ctr (s : t_subst) : t_unequal -> t_subst = function
| [] -> s
| (a,b)::fin ->
(* Purify first term *)
let (a,ss) = purify s a in
(* Purify second term *)
let (b,(ls,fv,ctr as sub)) = purify ss b
in
(* Test the negative constraint *)
match ctrTest sub (a,b) with
| Equal -> raise No_Solution
| NeverEqual -> add_ctr sub fin
| Uncertain -> add_ctr (ls,fv,(a,b)::ctr) fin