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:     call(node(),erlang,Fun,Args).
  
  
  
  %% ===========================================
  %% Property test for binary operators
  %% ===========================================
  prop_binop() ->
      ?FORALL({A,B,OP}, 
  	    {xany(),xany(),
  	     elements(['>', '<', 
  		       '==', '=:=', '/=', 
  		       '=<', '>=', 
  		       '++',
  		       '+', '-', '/', '*', 'div',
  %		       'bsl', 'bsr',
  		       'or'
  		      ])},
  	    begin
  		Here  = here(OP,[A,B]),
  		There = other(OP,[A,B]),
  		?WHENFAIL(io:format("here=~p~nthere=~p~n~n", [Here,There]),
  			  Here == There)
  	    end).
  
  smaller(Domain) ->
  %    ?SIZED(SZ, triq_dom:resize(random:uniform((SZ div 2)+1), Domain)).
  
negative.code:     oneof([table1, table2]).
  
  table_key() ->
      ?SUCHTHAT(X,oneof([key1, "key2", 123, 123.0, smaller(?DELAY(any()))]), X/=[]). % Workaround "[] key in sorted_set" bug in erts<5.8.1 .
  
  table_tuple() ->
      ?LET({K,L}, {table_key(), list(smaller(oneof([any(), pattern()])))},
  	 list_to_tuple([K | L])).
  
  table_tuple_pattern() ->
      ?LET({K,L}, {oneof([table_key(), pattern()]), list(pattern())},
  	 list_to_tuple([K | L])).
  
  pattern() ->
      oneof([pattern_special(), list(smaller(?DELAY(pattern()))), tuple(smaller(?DELAY(pattern()))), any()]).
  
  pattern_special() ->
      oneof(['_', '$1', '$2', '$3', '$10', '$01', '$$']).
  
  table_type() ->
  %%     oneof([set, bag, duplicate_bag, ordered_set]).
      oneof([set, ordered_set]).
  
  ets_cmd() ->
      oneof([{new, ?DELAY(table_name()), [table_type(), ?LET(X, oneof([1,1,1,2,choose(1,100)]), {keypos, X})]},
  	   {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()))},
  	   {member, table_name(), table_key()},
  	   {delete, table_name()},
  	   {delete, table_name(), table_key()},
  	   {match_object, table_name(), table_tuple_pattern()},
  	   {match_delete, table_name(), table_tuple_pattern()},
  	   {info, table_name()}
  	  ]).
  
  
  ets_program() ->
      smaller(list(ets_cmd())).
  
  xany()  ->
      oneof([int(), real(), bool(), atom(), 
  