anchor.diff:      let unknown = mk Tm_unknown None Range.dummyRange in
       Util.abs (S.binders_of_list [ a; c; the_a; the_c ]) (
         let l_ite = S.lid_as_fv Const.ite_lid (S.Delta_unfoldable 1) None in
  -      (* FIXME: this is using [Tm_unknown] because the arguments would be
  -       * painful to write. *)
         Util.mk_app c_lift2 (List.map S.as_arg [
  -        unknown; unknown; unknown; unknown;
  -        Util.mk_app (S.fv_to_tm l_ite) (List.map S.as_arg [
  -          S.bv_to_name c
  -        ])
  +        Util.mk_app (S.fv_to_tm l_ite) [S.as_arg (S.bv_to_name c)]
         ])
       ) ret in
   
  
positive.code:     let f = S.new_bv None t_f in
      let a1 = S.new_bv None (mk_gctx (S.bv_to_name a) (S.bv_to_name t1)) in
      let ret = Some (Inl (Util.lcomp_of_comp (mk_Total (mk_gctx (S.bv_to_name a) (S.bv_to_name t2))))) in
      Util.abs (S.binders_of_list [ a; t1; t2; f; a1 ]) (
        Util.mk_app c_app (List.map S.as_arg [
          S.bv_to_name a;
          S.bv_to_name t1;
          S.bv_to_name t2;
          Util.mk_app c_pure (List.map S.as_arg [ S.bv_to_name a; t_f; S.bv_to_name f]);
          S.bv_to_name a1 ])
      ) ret in
  
  
  
negative.code:   let mk_gctx (a: S.term) (e: S.term): S.term =
      Util.arrow ([ S.null_binder (mk_post a) ] @ binders) (S.mk_GTotal e) in
  
    let binders_of_list = List.map (fun (t, b) -> t, S.as_implicit b) in
  
    (* val st2_pure : #heap:Type -> #a:Type -> #t:Type -> x:t ->
         Tot (st2_ctx heap a t)
       let st2_pure #heap #a #t x = fun _post _h -> x *)
  