anchor.diff:                      begin match m with
                         | Meta_labeled(l, r, _) ->
                           (* meta doesn't block reduction, but we need to put the label back *)
  -                        norm cfg env (Meta(m,r)::stack) head
  +                        norm cfg env (Meta(env,m,r)::stack) head
   
                         | Meta_pattern args ->
                             let args = norm_pattern_args cfg env args in
  -                          norm cfg env (Meta(Meta_pattern args, t.pos)::stack) head //meta doesn't block reduction, but we need to put the label back
  +                          norm cfg env (Meta(env,Meta_pattern args, t.pos)::stack) head //meta doesn't block reduction, but we need to put the label back
   
                         | _ ->
                             norm cfg env stack head //meta doesn't block reduction
  
positive.code:     | UnivArgs _ -> "UnivArgs"
      | Match   _ -> "Match"
      | App (_, t,_,_) -> BU.format1 "App %s" (Print.term_to_string t)
      | Meta (m,_) -> "Meta"
      | Let  _ -> "Let"
      | Cfg _ -> "Cfg"
      | Debug (t, _) -> BU.format1 "Debug %s" (Print.term_to_string t)
  
negative.code:     | Some _ -> failwith "Unexpected set_memo: thunk already evaluated"
      | None -> r := Some t
  
  let rec env_to_string env = //BU.format1 "(%s elements)" (string_of_int <| List.length env)
      List.map (fun (bopt, c) ->
                  BU.format2 "(%s, %s)"
                     (match bopt with None -> "." | Some x -> FStar.Syntax.Print.binder_to_string x)
                     (closure_to_string c))
               env
              |> String.concat "; "
  and closure_to_string = function
      | Clos (env, t, _, _) -> BU.format2 "(env=%s elts; %s)" (List.length env |> string_of_int) (Print.term_to_string t)
      | Univ _ -> "Univ"
      | Dummy -> "dummy"
  
  let stack_elt_to_string = function
      | Arg (c, _, _) -> BU.format1 "Closure %s" (closure_to_string c)
  