anchor.diff:          encode_let x t1 e1 e2 env encode_term
   
         | Tm_let _ ->
  -        Errors.diag t0.pos "Non-top-level recursive functions are not yet fully encoded to the SMT solver; you may not be able to prove some facts";
  -        let e = varops.fresh "let-rec" in
  -        let decl_e = Term.DeclFun(e, [], Term_sort, None) in
  -        mkFreeV(e, Term_sort), [decl_e]
  +        Errors.diag t0.pos "Non-top-level recursive functions, and their enclosings let bindings (including the top-level let) are not yet fully encoded to the SMT solver; you may not be able to prove some facts";
  +        raise Inner_let_rec
   
         | Tm_match(e, pats) ->
           encode_match e pats mk_Term_unit env encode_term
  
positive.code:           in
            let eqns = List.rev eqns in
            prefix_decls@rest@eqns, env0
  
      with Let_rec_unencodeable ->
        let msg = bindings |> List.map (fun lb -> Print.lbname_to_string lb.lbname) |> String.concat " and " in
  
negative.code:                   else mkApp(f, List.map mkFreeV vars)
          in
  
          let encode_non_rec_lbdef (bindings:list<letbinding>) (typs:list<S.term>) (toks:list<(S.fv * (string * option<term>))>) (env:env_t) =
              match bindings, typs, toks with
              | [{lbunivs=uvs;lbdef=e}], [t_norm], [(flid_fv, (f, ftok))] ->
  
                  (* Open universes *)
                  let flid = flid_fv.fv_name.v in
                  let env', e, t_norm =
                  let tcenv', _, e_t =
                      Env.open_universes_in env.tcenv uvs [e; t_norm] in
                  let e, t_norm =
  