anchor.diff:    List.rev !sigelts @ sigelts', ed, lift_from_pure_opt
   
   
  -and tc_lex_t env ses quals lids =
  +let tc_lex_t env ses quals lids =
       (* We specifically type lex_t as:
   
             type lex_t<u> : Type(u) =
  
positive.code:       sigrng = r;
        sigmeta = default_sigmeta  }
  
  and tc_inductive env ses quals lids =
      let env0 = env in
      let sig_bndle, tcs, datas = TcInductive.check_inductive_well_typedness env ses quals lids in
      (* we have a well-typed inductive;
              we still need to check whether or not it supports equality
  
negative.code: 
      let is_noeq = List.existsb (fun q -> q = Noeq) quals in
  
      let res =
          if ((List.length tcs = 0) || ((lid_equals env.curmodule Const.prims_lid) && skip_prims_type ()) || is_noeq)
          then [sig_bndle], data_ops_ses
          else
              let is_unopteq = List.existsb (fun q -> q = Unopteq) quals in
              let ses =
                if is_unopteq then TcInductive.unoptimized_haseq_scheme sig_bndle tcs datas env tc_assume
                else TcInductive.optimized_haseq_scheme sig_bndle tcs datas env tc_assume
              in
              { sigel = Sig_bundle(tcs@datas, lids);
                sigquals = quals;
                sigrng = Env.get_range env;
                sigmeta = default_sigmeta  }::ses, data_ops_ses in
      ignore (Env.pop env "tc_inductive");
      res
  
  
  (* [tc_decl env se] typechecks [se] in environment [env] and returns *)
  (* the list of typechecked sig_elts, and a list of new sig_elts elaborated during typechecking but not yet typechecked *)
  let tc_decl env se: list<sigelt> * list<sigelt> =
    let env = set_hint_correlator env se in
    TcUtil.check_sigelt_quals env se;
    let r = se.sigrng in
  