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: %% any(). For example, {_,_} is a specialization of any(), but not of
  %% tuple(). Does not handle variables, but any() and unions (sort of).
  
  is_specialization(_, ?any) -> true;
  is_specialization(?any, _) -> false;
  is_specialization(?function(Domain1, Range1), ?function(Domain2, Range2)) ->
  
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) ->
  