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