anchor.diff:  		     case t_tuple_subtypes(Tuple) of
   		       unknown -> t_boolean();
   		       List ->
  -			 Keys = [type(erlang, element, 2, [Y,S]) || S <- List],
  -			 Infs = [t_inf(Key, X) || Key <- Keys],
  -			 case all_is_none(Infs) of
  +			 case key_comparisons_fail(X, Y, List) of
   			   true -> t_atom('false');
   			   false -> t_boolean()
   			 end
  
positive.code: 		     case t_tuple_subtypes(Tuple) of
  		       unknown -> Ret;
  		       List ->
  			 Keys = [type(erlang, element, 2, [Y, S])
  				 || S <- List],
  			 Infs = [t_inf(Key, X) || Key <- Keys],
  			 case all_is_none(Infs) of
  			   true -> t_atom('false');
  			   false -> Ret
  			 end
  
negative.code:   [t_number(), t_atom(), t_reference(), t_fun(), t_port(), t_pid(), t_tuple(),
     t_list(), t_binary()].
  
  key_comparisons_fail(X0, KeyPos, TupleList) ->
    X = case t_is_number(t_inf(X0, t_number())) of
  	false -> X0;
  	true -> t_number()
        end,
    lists:all(fun(Tuple) ->
  		Key = type(erlang, element, 2, [KeyPos, Tuple]),
  		t_is_none(t_inf(Key, X))
  	    end, TupleList).
  
  %%=============================================================================
  
  