anchor.diff:      | NotForFree ->
           ed
       | ForFree ->
  -        let wp_if_then_else, wp_binop, wp_assert, wp_assume = gen_wps_for_free env binders a wp_a in {
  -          ed with
  +        let
  +          wp_if_then_else,
  +          wp_binop,
  +          wp_assert,
  +          wp_assume,
  +          wp_close
  +        = gen_wps_for_free env binders a wp_a in
  +        { ed with
             if_then_else = wp_if_then_else;
             wp_binop = wp_binop;
             assert_p = wp_assert;
  -          assume_p = wp_assume
  +          assume_p = wp_assume;
  +          close_wp = wp_close
           }
     in
   
  
positive.code: 
    let implicit_binders_of_list = List.map (fun t -> t, S.as_implicit true) 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 *)
  
negative.code:   let wp_assume = normalize_and_make_binders_explicit wp_assume in
    check "wp_assume" (Util.abs binders wp_assume None);
  
    (* val st2_close_wp : heap:Type -> a:Type -> b:Type ->
                          f:(b->Tot (st2_wp heap a)) ->
                          Tot (st2_wp heap a)
      let st2_close_wp heap a b f = st2_app (st2_pure l_Forall) (st2_push f) *)
    let wp_close =
      let b = S.gen_bv "b" None Util.ktype in
      let t_f = Util.arrow [ S.null_binder (S.bv_to_name b) ] (S.mk_Total wp_a) in
      let f = S.gen_bv "f" None t_f in
      let body =
        Util.mk_app c_app (List.map S.as_arg [
          unknown; unknown;
          Util.mk_app c_pure (List.map S.as_arg [
            unknown;
            Util.mk_app (S.mk_Tm_uinst Util.tforall [ U_unknown ]) [ S.as_arg unknown ]]);
          Util.mk_app c_push (List.map S.as_arg [
            unknown; unknown;
            S.bv_to_name f])])
      in
      Util.abs (S.binders_of_list [ a; b; f ]) body ret_tot_wp_a
    in
    let wp_close = normalize_and_make_binders_explicit wp_close in
    check "wp_close" (Util.abs binders wp_close None);
  
    ([], wp_if_then_else),
    ([], wp_binop),
    ([], wp_assert),
    ([], wp_assume),
    ([], wp_close)
  
  let tc_eff_decl env0 (ed:Syntax.eff_decl) is_for_free =
    assert (ed.univs = []); //no explicit universe variables in the source; Q: But what about re-type-checking a program?
  