anchor.diff:  -spec t_inf(erl_type(), erl_type(), t_inf_opaques()) -> erl_type().
   
   t_inf(?var(_), ?var(_), _Opaques) -> ?any;
  -t_inf(?var(_), T, _Opaques) -> subst_all_vars_to_any(T);
  -t_inf(T, ?var(_), _Opaques) -> subst_all_vars_to_any(T);
  -t_inf(?any, T, _Opaques) -> subst_all_vars_to_any(T);
  -t_inf(T, ?any, _Opaques) -> subst_all_vars_to_any(T);
  +t_inf(?var(_), T, _Opaques) -> do_not_subst_all_vars_to_any(T);
  +t_inf(T, ?var(_), _Opaques) -> do_not_subst_all_vars_to_any(T);
  +t_inf(?any, T, _Opaques) -> do_not_subst_all_vars_to_any(T);
  +t_inf(T, ?any, _Opaques) -> do_not_subst_all_vars_to_any(T);
   t_inf(?none, _, _Opaques) -> ?none;
   t_inf(_, ?none, _Opaques) -> ?none;
   t_inf(?unit, _, _Opaques) -> ?unit;	% ?unit cases should appear below ?none
   t_inf(_, ?unit, _Opaques) -> ?unit;
  -t_inf(T, T, _Opaques) -> subst_all_vars_to_any(T);
  +t_inf(T, T, _Opaques) -> do_not_subst_all_vars_to_any(T);
   t_inf(?atom(Set1), ?atom(Set2), _) ->
     case set_intersection(Set1, Set2) of
       ?none ->  ?none;
  
positive.code: t_sup(T, ?none) -> T;
  t_sup(?unit, T) -> T;
  t_sup(T, ?unit) -> T;
  t_sup(T, T) -> subst_all_vars_to_any(T);
  t_sup(?var(_), _) -> ?any;
  t_sup(_, ?var(_)) -> ?any;
  t_sup(?atom(Set1), ?atom(Set2)) ->
  
negative.code: t_inf(_, ?product(_), _Opaques) ->
    ?none;
  t_inf(?tuple(?any, ?any, ?any), ?tuple(_, _, _) = T, _Opaques) ->
    do_not_subst_all_vars_to_any(T);
  t_inf(?tuple(_, _, _) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
    do_not_subst_all_vars_to_any(T);
  t_inf(?tuple(?any, ?any, ?any), ?tuple_set(_) = T, _Opaques) ->
    do_not_subst_all_vars_to_any(T);
  t_inf(?tuple_set(_) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
    do_not_subst_all_vars_to_any(T);
  t_inf(?tuple(Elements1, Arity, _Tag1), ?tuple(Elements2, Arity, _Tag2), Opaques) ->
    case t_inf_lists_strict(Elements1, Elements2, Opaques) of
      bottom -> ?none;
  