anchor.diff:     _Setup = fun() -> {ok, Pid} = tcache:start_link(100), Pid end,
      _Cleanup = fun(Pid) -> tcache_stop(Pid) end,
      [
  -    ?_assertMatch({46,_}, tcore_eval(T1, [], [])),
  -    ?_assertMatch({46,_}, tcore_eval(T1, [{DimT,58}], [DimT]))
  +    ?_assertMatch({46,_}, tcore_eval(T1)),
  +    ?_assertMatch({46,_}, tcore_eval(T1, _K=[{DimT,58}], _D=[DimT]))
      ]}.
   
   creation_of_b_abs_in_multiple_contexts_plays_nicely_w_cache() ->
  
positive.code:    ]}.
  
  basic_b_apply() ->
    BAbsT0 = t0(s("F where fun F.argAsVarId = argAsVarId end")),
    %% Create an AST as if it were generated by transformation 0
    T0 = {b_apply, BAbsT0, [46]},
    T1 = t1(T0),
    {setup,
     _Setup = fun() -> {ok, Pid} = tcache:start_link(100), Pid end,
     _Cleanup = fun(Pid) -> tcache_stop(Pid) end,
     [
      ?_assertMatch({46,_}, tcore_eval(T1))
     ]}.
  
  b_abs_w_two_formal_params() ->
    BAbsT0 = t0(s("F where fun F.x .y = x - y end")), %% Minus is not commutative
    ?assertMatch({wherevar, "F",
                  [{"F", {b_abs, [], ["x", "y"],
                          {primop, _, ["x", "y"]}}}]},
                 BAbsT0),
    %% Create an AST as if it were generated by transformation 0
    T0 = {b_apply, BAbsT0, [46, 1]},
    T1 = t1(T0),
    %% Eval
    {setup,
     _Setup = fun() -> {ok, Pid} = tcache:start_link(100), Pid end,
     _Cleanup = fun(Pid) -> tcache_stop(Pid) end,
     [
      ?_assertMatch({45,_}, tcore_eval(T1))
     ]}.
  
  b_abs_nested_in_wheredim_does_not_cause_wrong_substitution() ->
    BAbsReturnedByWheredimT0 =
      t0(s("(F where fun F.x = x + #.x end) where dim x <- 46 end")),
    %% Create an AST as if it were generated by transformation 0
    T0 = {b_apply, BAbsReturnedByWheredimT0, [1]},
    WheredimX = {dim,{[0],1},"x"},
    BAbsX = {phi,"x"},
    T1 = t1(T0),
    ?assertMatch(
       {b_apply,
        {wheredim,
         {wherevar, "F",
          [{"F",
            {b_abs,
             %% "No wheredim clause can return an abstraction that
  
negative.code:                         {'#',WheredimX}]}
            }}]},
         [{WheredimX,46}]},
       t1(t0(s(S)))),
    %% Eval
    {setup,
     _Setup = fun() -> {ok, Pid} = tcache:start_link(100), Pid end,
     _Cleanup = fun(Pid) -> tcache_stop(Pid) end,
     [ ?_assertMatch({47,_}, eval(S)) ]}.
  
  wheredim_nested_in_b_abs_does_not_cause_wrong_substitution() ->
    T0 = t0(s("F.1 where fun F.x = (x + #.x) where dim x <- 46 end end")),
    WheredimX = {dim,{[0,1],1},"x"},
    BAbsX = {phi,"x"},
    T1 = t1(T0),
    ?assertMatch(
       {wherevar,
        {b_apply, "F", [1]},
        [{"F",
          {b_abs, [], [BAbsX],
           {wheredim,
            {primop, _, [{'?',BAbsX},
                         {'#',WheredimX}]},
            [{WheredimX,46}]}}
         }]},
       T1),
    %% Eval
    {setup,
     _Setup = fun() -> {ok, Pid} = tcache:start_link(100), Pid end,
     _Cleanup = fun(Pid) -> tcache_stop(Pid) end,
     [ ?_assertMatch({47,_}, tcore_eval(T1)) ]}.
  
  b_abs_can_return_b_abs_and_formal_params_are_not_confused() ->
    S =
      "(G.1).46.3
      where
        fun F.x.y = x - y
        fun G.x = F
      end",
    {setup,
     _Setup = fun() -> {ok, Pid} = tcache:start_link(100), Pid end,
     _Cleanup = fun(Pid) -> tcache_stop(Pid) end,
     [ ?_assertMatch({43,_}, eval(S)) ]}.
  
  b_abs_cannot_access_dims_not_in_creation_context() ->
    NestedS =
      "G.1
      where
        fun G.y = F
        where
          fun F.x = x - y
        end
      end",
    S =
      "(G.1).46
      where
        fun G.y = F
        where
          fun F.x = x - y
        end
      end",
    {foreach,
     _Setup = fun() -> {ok, Pid} = tcache:start_link(100), Pid end,
     _Cleanup = fun(Pid) -> tcache_stop(Pid) end,
     [
      ?_assertMatch({{frozen_b_abs,[],[{phi,"x"}],{primop,_,_}},_},
                    eval(NestedS)),
      ?_assertMatch({[{phi,"y"}],_}, eval(S))
     ]}.
  
  b_abs_can_use_argument_for_querying_creation_context() ->
  