anchor.diff:  is_compat_args([], []) -> true;
   is_compat_args(_, _) -> false.
   
  -is_compat_arg(A, A) -> true;
   is_compat_arg(A1, A2) ->
     is_specialization(A1, A2) orelse is_specialization(A2, A1).
   
  
positive.code:   is_specialization(T1, t_opaque_structure(T2));
  is_specialization(?var(_), _) -> exit(error);
  is_specialization(_, ?var(_)) -> exit(error);
  is_specialization(T, T) -> true;
  is_specialization(?none, _) -> false;
  is_specialization(_, ?none) -> false;
  is_specialization(?unit, _) -> false;
  is_specialization(_, ?unit) -> false;
  is_specialization(#c{}, #c{}) -> false.
  
  specialization_list(L1, L2) ->
    length(L1) =:= length(L2) andalso specialization_list1(L1, L2).
  
negative.code:   specialization_list(Elements1, sup_tuple_elements(List));
  is_specialization(?tuple_set(List1), ?tuple_set(List2)) ->
    try
      specialization_list_list([sup_tuple_elements(T) || {_Arity, T} <- List1],
                               [sup_tuple_elements(T) || {_Arity, T} <- List2])
    catch _:_ -> false
    end;
  is_specialization(?union(List1)=T1, ?union(List2)=T2) ->
  