anchor.diff:        Set2 :: set(Element),
         Set3 :: set(Element).
   intersection(#{}=S1, #{}=S2) ->
  -    maps:intersect(S1, S2);
  +    case map_size(S1) < map_size(S2) of
  +        true ->
  +            Next = maps:next(maps:iterator(S1)),
  +            intersection_heuristic(Next, [], [], floor(map_size(S1) * 0.75), S1, S2);
  +        false ->
  +            Next = maps:next(maps:iterator(S2)),
  +            intersection_heuristic(Next, [], [], floor(map_size(S2) * 0.75), S2, S1)
  +    end;
   intersection(S1, S2) ->
       case size(S1) < size(S2) of
           true ->
  
positive.code:         {K, _, NextIter} ->
              case Fun(K) of
                  true ->
                      [{K,?VALUE} | filter_1(Fun, NextIter)];
                  false ->
                      filter_1(Fun, NextIter)
              end;
  
negative.code:       Pred :: fun((Element) -> boolean()),
        Set1 :: set(Element),
        Set2 :: set(Element).
  filter(F, #{}=D) -> maps:from_keys(filter_1(F, maps:iterator(D)), ?VALUE);
  filter(F, #set{}=D) -> filter_set(F, D).
  
  filter_1(Fun, Iter) ->
  