anchor.diff:  t_subst_aux(?tuple_set(_) = TS, VarMap) ->
     t_sup([t_subst_aux(T, VarMap) || T <- t_tuple_subtypes(TS)]);
   t_subst_aux(?map(Pairs), VarMap) ->
  -erlang:display({?LINE,map,subst_aux,Pairs}),
     ?map([{t_subst_aux(K, VarMap), t_subst_aux(V, VarMap)} ||
            {K, V} <- Pairs]);
   t_subst_aux(?opaque(Es), VarMap) ->
  
positive.code: t_subst_dict(?tuple_set(_) = TS, Dict) ->
    t_sup([t_subst_dict(T, Dict) || T <- t_tuple_subtypes(TS)]);
  t_subst_dict(?map(Pairs), Dict) ->
  erlang:display({?LINE,map,subst_dict,Pairs}),
    ?map([{t_subst_dict(K, Dict), t_subst_dict(V, Dict)} ||
           {K, V} <- Pairs]);
  t_subst_dict(?opaque(Es), Dict) ->
  
negative.code: t_collect_vars(?tuple_set(_) = TS, Acc) ->
    t_collect_vars_list(t_tuple_subtypes(TS), Acc);
  t_collect_vars(?map(_) = Map, Acc0) ->
    Acc = t_collect_vars_list(map_keys(Map), Acc0),
    t_collect_vars_list(map_values(Map), Acc);
  t_collect_vars(?opaque(Set), Acc) ->
  