anchor.diff:  
   non_empty(G) ->
       ?SUCHTHAT(X, G, X /= [] andalso X /= <<>>).
  +
  +%% Make sure at least one node is up - code in riak_kv_util makes
  +%% some assumptions that the node the get FSM is running on is
  +%% in the cluster causing problems if it isn't.
  +at_least_one_up(G) ->
  +    ?SUCHTHAT(X, G, lists:member(up, X)).
   
   largenat() ->
       ?LET(X, largeint(), abs(X)).
  
positive.code:         end,
  
      RepairObject  = (catch build_merged_object(Heads, Objects)),
      RepairObjects = [ Obj || {vnode_put, _, {_, _, Obj, _, _}} <- RepairH ],
  
      conjunction(
          [{puts, equals(lists:sort(Expected), lists:sort(Actual))},
  
negative.code:     Heads  = merge_heads([ Lineage || {_, {ok, Lineage}} <- H ]),
      
      AllDeleted = lists:all(fun({_, {ok, Lineage}}) ->
                                  Obj1 = proplists:get_value(Lineage, Objects),
                                  riak_kv_util:is_x_deleted(Obj1);
                                (_) -> true
                             end, H),
      Expected = case AllDeleted of
  