anchor.diff:  -include("machi.hrl").
   
   -define(MGR, machi_chain_manager).
  +-define(D(X), io:format(user, "~s ~p\n", [??X, X])).
   
   -export([]).
   
  
positive.code:                                                  [], PsUPI1, Nodes -- PsUPI1, []),
                         P2 = ?MGR:make_projection(3, 2, <<>>, HdNd, Nodes,
                                                   [], PsUPI2, Nodes -- PsUPI2, []),
                         Res = case (catch projection_transition_is_sane(P1, P2)) of
                                   true -> true;
                                   _    -> false
                               end,
                         {Res, UPI1, UPI2}
                     end || HdNd <- Nodes,
                            {UPI1,UPI2} <- Combos,
                            %% We assume that the author appears in any 
                            UPI1 /= [],
                            UPI2 /= [],
                            %% HdNd is the author for all of these
  
negative.code:     Trans = {P1#projection.upi, P2#projection.upi},
      [Trans|extract_upi_transitions([P2|T])].
  
  find_common_prefix([], _) ->
      [];
  find_common_prefix(_, []) ->
      [];
  find_common_prefix([H|L1], [H|L2]) ->
      [H|find_common_prefix(L1, L2)];
  find_common_prefix(_, _) ->
      [].
  
  calc_projection_test_() ->
      {timeout, 60,
       fun() ->
               %% Nodes = [a,b,c,d],
               Nodes = [a,b,c],
               Cs = combinations(Nodes),
               Combos = lists:sort([{UPI1, UPI2} || UPI1 <- Cs, UPI2 <- Cs]),
               timer:sleep(500),
  