anchor.diff:              i+1, decls@g, env'
   
           | S.Binding_lid(x, (_, t)) ->
  -            let t_norm = whnf env t in
  +            let t_norm = norm_before_encoding env t in
               let fv = S.lid_as_fv x delta_constant None in
   //            Printf.printf "Encoding %s at type %s\n" (Print.lid_to_string x) (Print.term_to_string t);
               let g, env' = encode_free_var false env fv t t_norm [] in
  
positive.code:           i+1, decls, env
  
          | S.Binding_var x ->
              let t1 = N.normalize [Env.Beta; Env.Eager_unfolding; Env.Simplify; Env.Primops; Env.EraseUniverses] env.tcenv x.sort in
              if Env.debug env.tcenv <| Options.Other "SMTEncoding"
              then (BU.print3 "Normalized %s : %s to %s\n" (Print.bv_to_string x) (Print.term_to_string x.sort) (Print.term_to_string t1));
              let t, decls' = encode_term t1 env in
  
negative.code:           bindings |> List.fold_left (fun (toks, typs, decls, env) lb ->
              (* some, but not all are lemmas; impossible *)
              if U.is_lemma lb.lbtyp then raise Let_rec_unencodeable;
              let t_norm = norm_before_encoding env lb.lbtyp in
              (* We are declaring the top_level_let with t_norm which might contain *)
              (* non-reified reifiable computation type. *)
              (* TODO : clear this mess, the declaration should have a type corresponding to *)
  