anchor.diff:      {Vs, Env}.
   
   visit_pat(Env0, #c_var{name=V}, Vs) ->
  -    {[V|Vs], dict:store(V, 0, Env0)};
  +    {[V|Vs], Env0#{V=>0}};
   visit_pat(Env0, #c_tuple{es=Es}, Vs) ->
       visit_pats(Es, Env0, Vs);
   visit_pat(Env0, #c_map{es=Es}, Vs) ->
  
positive.code:     {R, Env};
  visit(Env0, #c_var{name=X}=R) ->
      %% There should not be any free variables. If there are,
      %% the next line will cause an exception.
      {ok, N} = dict:find(X, Env0),
      {R, dict:store(X, N+1, Env0)};
  visit(Env, #c_literal{}=R) ->
      {R, Env};
  visit(Env0, #c_tuple{es=Es0}=R) ->
  
negative.code:     bind_vars(Vs, Env, []).
  
  bind_vars([#c_var{name=X}|Vs], Env0, Xs)->
      bind_vars(Vs, Env0#{X=>0}, [X|Xs]);
  bind_vars([], Env,Xs) ->
      {Xs, Env}.
  
  