anchor.diff:       Val1 < Val2 ->
         findfirst(N1+1, N2, U1, B1, U2, B2)
     end.
  +
  +%% Optimization. Before Erlang/OTP 25, subst_all_vars_to_any() was
  +%% called. It turned out that variables are not to be substituted for
  +%% any() since either there are no variables, or variables are
  +%% substituted for any() afterwards.
  +do_not_subst_all_vars_to_any(T) ->
  +  T.
   
   %%-----------------------------------------------------------------------------
   %% Substitution of variables
  
positive.code: t_inf(_, ?product(_), _Opaques) ->
    ?none;
  t_inf(?tuple(?any, ?any, ?any), ?tuple(_, _, _) = T, _Opaques) ->
    subst_all_vars_to_any(T);
  t_inf(?tuple(_, _, _) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
    subst_all_vars_to_any(T);
  t_inf(?tuple(?any, ?any, ?any), ?tuple_set(_) = T, _Opaques) ->
    subst_all_vars_to_any(T);
  t_inf(?tuple_set(_) = T, ?tuple(?any, ?any, ?any), _Opaques) ->
    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;
  
negative.code: t_sup(T, ?none) -> T;
  t_sup(?unit, T) -> T;
  t_sup(T, ?unit) -> T;
  t_sup(T, T) -> do_not_subst_all_vars_to_any(T);
  t_sup(?var(_), _) -> ?any;
  t_sup(_, ?var(_)) -> ?any;
  t_sup(?atom(Set1), ?atom(Set2)) ->
  