anchor.diff:  ops() ->
       list(op()).
   
  +ops_conc() ->
  +    ?LET(Ops, ops(), chunk(Ops, 5)).
  +
  +chunk([], _) ->
  +    [];
  +chunk(Ops, MaxSize) ->
  +    ?LET(ChunkSize, int(1, MaxSize),
  +         begin
  +             {Chunk, Rest} =
  +                 try
  +                     lists:split(ChunkSize, Ops)
  +                 catch
  +                     error:badarg ->
  +                         {Ops, []}
  +                 end,
  +             [{concurrent, Chunk} | chunk(Rest, MaxSize)]
  +         end).
  +
   op() ->
       frequency([{1, op_flush()},
                  {20, ?LET(Key, key(),
  
positive.code:                  recent_count = RecentCount,
                   stale_count = StaleCount}.
  
  dispatch_op(Op) when is_atom(Op) ->
      dispatch_op({Op});
  dispatch_op(Op) when is_tuple(Op) ->
      [F | Args] = tuple_to_list(Op),
      R = erlang:apply(mru_cache, F, [?CACHE | Args]),
      {R, get_cache_state()}.
  
  run_check_cache(Operations, Check) ->
      run_check_cache(Operations,
  
negative.code:     {?FORALL(Ops, ops(), check_model(Ops) =:= true),
       [{iters, 1000},
        {diag, fun check_model/1}]}.
  
  prop_invariants_concurrent_() ->
      {?FORALL(Ops, ops_conc(), check_invariants(Ops)),
       [{iters, 1000}]}.
  