anchor.diff:      [{Node, {Count, timestamp()}}].
   
   % @doc Return true if Va is a direct descendant of Vb, else false -- remember, a vclock is its own descendant!
  --spec descends(Va :: vclock()|[], Vb :: vclock()|[]) -> boolean().
  +-spec descends(Va :: vclock(), Vb :: vclock()) -> boolean().
   descends(_, []) ->
       % all vclocks descend from the empty vclock
       true;
  
positive.code: 
  -export_type([vclock/0, timestamp/0, vclock_node/0, dot/0]).
  
  -opaque vclock() :: [vc_entry()].
  -opaque dot() :: vc_entry().
  
  % The timestamp is present but not used, in case a client wishes to inspect it.
  -type vc_entry() :: {vclock_node(), {counter(), timestamp()}}.
  
  % Nodes can have any term() as a name, but they must differ from each other.
  -type   vclock_node() :: term().
  
negative.code: 
  % @doc Combine all VClocks in the input list into their least possible
  %      common descendant.
  -spec merge(VClocks :: [vclock()]) -> vclock().
  merge([])             -> [];
  merge([SingleVclock]) -> SingleVclock;
  merge([First|Rest])   -> merge(Rest, lists:keysort(1, First)).
  