anchor.diff:           {[{Jkey, Pkey}|P], F}
         end,
         {[], []},
  -      schema(Head)
  +      schema(Fun, Head)
      ).
   
   %%
  
positive.code: 
  %%
  %% return predicate schema (variable binding to keys) 
  schema([S, P]) ->
     [{S, s}, {P, p}];
  schema([S, P, O]) ->
     [{S, s}, {P, p}, {O, o}];
  schema([S, P, O, _]) ->
     [{S, s}, {P, p}, {O, o}];
  schema([S, P, O, _, K]) ->
     [{S, s}, {P, p}, {O, o}, {K, k}].
  
  %%
  
negative.code: 
  %%
  %% split query to pattern match and filters
  q_split(#{'@' := Fun, '_' := Head} = Pattern) ->
     lists:foldl(
        fun
        ({Pkey, Jkey}, {P, F} = Acc) when is_atom(Pkey) ->
  