anchor.diff:          failwith (Util.format1 "Unexpected lex_t: %s\n" (Print.sigelt_to_string (Sig_bundle(ses, [], lids, Range.dummyRange))))
       end
   
  +let tc_assume (env:env) (lid:lident) (phi:formula) (quals:list<qualifier>) (r:Range.range) :sigelt =
  +    let env = Env.set_range env r in
  +    let k, _ = U.type_u() in
  +    let phi = tc_check_trivial_guard env phi k |> norm env in
  +    TcUtil.check_uvars r phi;
  +    Sig_assume(lid, phi, quals, r)
  +
   let tc_inductive env ses quals lids =
       (*  Consider this illustrative example:
   
  
positive.code:       se, env
  
      | Sig_assume(lid, phi, quals, r) ->
        let env = Env.set_range env r in
        let k, _ = U.type_u() in
        let phi = tc_check_trivial_guard env phi k |> norm env in
        TcUtil.check_uvars r phi;
        let se = Sig_assume(lid, phi, quals, r) in
        let env = Env.push_sigelt env se in
        se, env
  
  
negative.code:         let fml = List.fold_right (fun (b:binder) (t:term) -> mk_Tm_app tforall [ S.as_arg (U.abs [b] (SS.close [b] t) None) ] None dr) ibs fml in
          //fold right with bs, close and add a forall b
          let fml = List.fold_right (fun (b:binder) (t:term) -> mk_Tm_app tforall [ S.as_arg (U.abs [b] (SS.close [b] t) None) ] None dr) bs fml in
          //so now this is the haseq formula we want to generate, TODO: make it a Sig_assume, and generalize universe variables, TODO: how to add pattern in this forall
  
          //this is the soundness guard
          let guard = U.mk_conj (U.mk_conj haseq_bs haseq_ind) fml in
  