anchor.diff:          if will_encode_definition
           then [], env //nothing to do at the declaration; wait to encode the definition
           else let fv = S.lid_as_fv lid Delta_constant None in
  -             let decls, env = encode_top_level_val env fv t quals in
  +             let decls, env =
  +               encode_top_level_val
  +                 (se.sigattrs |> BU.for_some is_uninterpreted_by_smt)
  +                 env fv t quals in
                let tname = lid.str in
                let tsym = mkFreeV(tname, Term_sort) in
                decls
  
positive.code:    match f.tm with
     | App(TrueOp, _) -> true
     | _ -> false
  
  
negative.code:     let form, decls = encode_function_type_as_formula t env in
      decls@[Util.mkAssume(form, Some ("Lemma: " ^ lid.str), ("lemma_"^lid.str))]
  
  let encode_free_var uninterpreted env fv tt t_norm quals =
      let lid = fv.fv_name.v in
      if not <| (U.is_pure_or_ghost_function t_norm || is_reifiable_function env.tcenv t_norm)
      || U.is_lemma t_norm
      || uninterpreted
      then let vname, vtok, env = new_term_constant_and_tok_from_lid env lid in
           let arg_sorts = match (SS.compress t_norm).n with
              | Tm_arrow(binders, _) -> binders |> List.map (fun _ -> Term_sort)
  