anchor.diff:  -type q() :: {and_q,  q(), q()} |
                {or_q,   q(), q()} |
                {not_q,  q()     } |
  -             {term_q, doko_utf8:str(), list(doko_doc:zone_id())}.
  +             {term_q, string(), list(string())}.
   
   %%----------------------------------------------------------------------------
   %% API
   %%----------------------------------------------------------------------------
   
  --spec execute(atom(), doko_utf8:str()) -> gb_set(). %% TODO: might return an error
  +-spec execute(atom(), doko_utf8:str()) -> gb_set().
   execute(IndexId, Str) ->
       %% parse and preprocess query
       Clauses = [partition(flatten(X))||X <- clauses(dnf(from_str(Str)))],
  
positive.code: not_element(#not_q{}) ->
      false.
  
  depth({_,L,R}) ->
      max(depth(L),depth(R))+1;
  depth({not_q,Q}) ->
      depth(Q)+1;
  
negative.code: %% Tests
  %%----------------------------------------------------------------------------
  
  -ifdef(TEST).
  
  proper_test_() ->
      [{atom_to_list(F),
  