anchor.diff:    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_list(LL1, LL2) ->
  +  length(LL1) =:= length(LL2) andalso specialization_list_list1(LL1, LL2).
  +
  +specialization_list_list1([], []) -> true;
  +specialization_list_list1([L1|LL1], [L2|LL2]) ->
  +  specialization_list(L1, L2) andalso specialization_list_list1(LL1, LL2).
   
   specialization_list(L1, L2) ->
     length(L1) =:= length(L2) andalso specialization_list1(L1, L2).
  
positive.code:   specialization_list(Elements1, sup_tuple_elements(List));
  is_specialization(?tuple_set(List1), ?tuple_set(List2)) ->
    try
      specialization_list(lists:append([T || {_Arity, T} <- List1]),
                          lists:append([T || {_Arity, T} <- List2]))
    catch _:_ -> false
    end;
  is_specialization(?union(List1)=T1, ?union(List2)=T2) ->
  
negative.code: is_compat_args([], []) -> true;
  is_compat_args(_, _) -> false.
  
  is_compat_arg(A1, A2) ->
    is_specialization(A1, A2) orelse is_specialization(A2, A1).
  
  