let is_allowed_sub (neg_ctrs,_ : t_vi_ctrs) ls =
  (* a dummy substitution, to apply egal *)
  let sub = (ls,FreeVar 0,[])
  in
  let rec is_allowed_sub_rec = function
    | (n,m)::tail ->
        (* n and m are not allowed to be equal *)
        if egal sub (Var n) (Var m) then
          (* n and m must not be equal, but they are, so ls is not an allowed
           * substitution. *)

          false
        else
          is_allowed_sub_rec tail
    | [] -> true
  in
  is_allowed_sub_rec neg_ctrs