anchor.diff:  
   active_digraph_delete({'d', DG}) ->
     digraph:delete(DG);
  -active_digraph_delete({'e', Out, In}) ->
  +active_digraph_delete({'e', Out, In, Maps}) ->
     ets:delete(Out),
  -  ets:delete(In).
  +  ets:delete(In),
  +  ets:delete(Maps).
   
   digraph_edges(DG) ->
     digraph:edges(DG).
  
positive.code:   ok.
  
  condensation(G) ->
    SCs = digraph_utils:strong_components(G),
    %% Subsitute strong components for vertices in edges:
    C2V = sofs:relation([{SC, V} || SC <- SCs, V <- SC], [{scc, v}]),
    Es = sofs:relation(digraph:edges(G), [{v, v}]),
    R1 = sofs:relative_product(C2V, Es),
    R2 = sofs:relative_product(C2V, sofs:converse(R1)),
    %% Create in- and out-neighbours:
    In = sofs:relation_to_family(sofs:strict_relation(R2)),
    R3 = sofs:converse(R2),
    Out = sofs:relation_to_family(sofs:strict_relation(R3)),
    [OutETS, InETS] =
      [ets:new(Name,[{read_concurrency, true}]) ||
        Name <- [callgraph_deps_out, callgraph_deps_in]],
    ets:insert(OutETS, sofs:to_external(Out)),
    ets:insert(InETS, sofs:to_external(In)),
    erlang:garbage_collect(),
    {{'e', OutETS, InETS}, SCs}.
  
negative.code: 
  -opaque callgraph() :: #callgraph{}.
  
  -type active_digraph() :: {'d', digraph:graph()}
                          | {'e',
                             Out :: ets:tid(),
                             In :: ets:tid(),
                             Map :: ets:tid()}.
  
  %%----------------------------------------------------------------------
  
  