let rec compatible_signature xs ys =
    match xs , ys with
      | [] , [] -> true
      | [] , _ | _ , [] -> false
      | x::xs , y::ys ->
          (compare_tau (tau_of_var x) (tau_of_var y) = 0) &&
            compatible_signature xs ys