anchor.diff:  ets_do({insert_new, Tab, Item}) -> ets:insert_new(Tab, Item);
   ets_do({lookup, Tab, Key}) -> ets:lookup(Tab, Key);
   ets_do({lookup_element, Tab, Key, Pos}) -> ets:lookup_element(Tab, Key, Pos);
  +ets_do({member, Tab, Key}) -> ets:member(Tab, Key);
   ets_do({delete, Tab}) -> ets:delete(Tab);
  -ets_do({delete, Tab, Key}) -> ets:delete(Tab, Key).
  +ets_do({delete, Tab, Key}) -> ets:delete(Tab, Key);
  +ets_do({match_object, Tab, Pattern}) -> ets:match_object(Tab, Pattern);
  +ets_do({match_delete, Tab, Pattern}) -> ets:match_delete(Tab, Pattern);
  +ets_do({info, Tab}) -> [{P,ets:info(Tab,P)}
  +			|| P <- [name, type, size, named_table, keypos, protection]].
   
   
   %% ===========================================
  
positive.code:     oneof([table1, table2]).
  
  table_key() ->
      oneof([key1, "key2", 123, 123.0, smaller(?DELAY(any()))]).
  
  table_tuple() ->
      ?LET({K,L}, {table_key(), list(smaller(?DELAY(any())))},
  	 list_to_tuple([K | L])).
  
  table_type() ->
  %%     oneof([set, bag, duplicate_bag, ordered_set]).
      oneof([set, ordered_set]).
  
  ets_cmd() ->
      oneof([{new, ?DELAY(table_name()), [table_type()]},
  	   {insert, table_name(), table_tuple()},
  	   {insert_new, table_name(), table_tuple()},
  	   {lookup, table_name(), table_key()},
  	   {lookup_element, table_name(), table_key(), smaller(?DELAY(int()))},
  	   {delete, table_name()},
  	   {delete, table_name(), table_key()}]).
  
  
  ets_program() ->
      list(ets_cmd()).
  
  xany()  ->
      oneof([int(), real(), bool(), atom(), 
  
negative.code: prop_same_ets_behaviour() ->
      ?FORALL(X, ets_program(),
  	    begin
  		Here = here(?MODULE, ets_behaviour_wrapper, [X]),
  		There = other(?MODULE, ets_behaviour_wrapper, [X]),
  		if Here /= There -> io:format("Diff: here=~p,\n     there=~p~n", [Here,There]); true -> ok end,
  