anchor.diff:      gc_dict(Start + 1, Edge, dict:erase(Start, Acc)).
   
   -spec get_smaller(pvc_vc(), vlog()) -> {val(), pvc_vc()}.
  -get_smaller(VC, #vlog{at=Id, smallest=Smallest, data=Dict}) ->
  +get_smaller(VC, #vlog{at=Id, smallest=Smallest, biggest=Big, data=Dict}) ->
       case dict:is_empty(Dict) of
           true ->
               ?bottom;
           false ->
               LookupKey = pvc_vclock:get_time(Id, VC),
  -            case Smallest =/= bottom andalso LookupKey < Smallest of
  +            %% TODO(borja): Check this is sound
  +            TooBig = LookupKey > Big,
  +            TooSmall = Smallest =/= bottom andalso LookupKey < Smallest,
  +            if
  +                TooBig ->
  +                    {ok, Version} = dict:find(Big, Dict),
  +                    Version;
  +
  +                TooSmall ->
  +                    ?bottom;
  +
                   true ->
  -                    ?bottom;
  -                false ->
                       get_smaller_internal(LookupKey, Dict)
               end
       end.
  
positive.code: -record(vlog, {
      at :: partition_id(),
      smallest :: non_neg_integer() | bottom,
      data :: dict:dict(integer(), {val(), pvc_vc()})
  }).
  
  
negative.code: 
  -spec new(partition_id()) -> vlog().
  new(AtId) ->
      #vlog{at=AtId, smallest=bottom, biggest=0, data=dict:new()}.
  
  -spec insert(pvc_vc(), term(), vlog()) -> vlog().
  insert(VC, Value, V=#vlog{at=Id, smallest=bottom, biggest=Big, data=Dict}) ->
      Key = pvc_vclock:get_time(Id, VC),
      V#vlog{smallest=Key, biggest=max(Big,Key), data=dict:store(Key, {Value, VC}, Dict)};
  
  insert(VC, Value, V=#vlog{at=Id, smallest=Smallest, biggest=Big, data=Dict}) ->
      Key = pvc_vclock:get_time(Id, VC),
      {NewSmallest, NewDict} = maybe_gc(Smallest, dict:store(Key, {Value, VC}, Dict)),
      V#vlog{smallest=NewSmallest, biggest=max(Big, Key), data=NewDict}.
  
  maybe_gc(Smallest, Dict) ->
      Size = dict:size(Dict),
  