anchor.diff:  -export_type([mvreg/0, mvreg_op/0]).
   
   %% TODO: make opaque
  +-type actor() :: term().
  +-type ts()    :: non_neg_integer().
   -type mvreg() :: [{term(), riak_dt_vclock:vclock()}].
   
  --type mvreg_op() :: {assign, term(), non_neg_integer()}
  +-type mvreg_op() :: {assign, term(), ts()}
                     | {assign, term()}
  -                  | {propagate, term(), term()}.
  +                  | {propagate, term(), ts()}.
   
   -type mv_q() :: timestamp.
   
  
positive.code: %%
  %% This kind of update is supposed to be linealizable so the operation
  %% issuer does not need to provide the vector clock it has observed.
  -spec update(mvreg_op(), term(), mvreg()) ->
                      {ok, mvreg()}.
  update({assign, Value}, Actor, MVReg) ->
      VV = inc_vv(MVReg, Actor),
      NewMVReg = [{Value, VV}],
  
negative.code:             merge_to(T, MVReg2++[H])
      end.
  
  %% @doc If any timestamp in the first list dominates the second vector clock.
  -spec if_dominate(riak_dt_vclock:vclock(), riak_dt_vclock:vclock()) -> boolean().
  if_dominate([], _VC) ->
      false;
  if_dominate([H|T], VC) ->
  