anchor.diff:        else None
       in
       BU.bind_opt mk_comp (fun f ->
  -    BU.bind_opt (universe_of_well_typed_term env tbody) (fun u ->
  -    Some (S.mk (Tm_arrow(bs, f tbody (Some u))) t.pos)))
  +      let tbody =
  +        match tbody with
  +        | Some _ -> tbody
  +        | None ->
  +          let bs, body = SS.open_term bs body in
  +          BU.map_opt (type_of_well_typed_term (Env.push_binders env bs) body) (SS.close bs) in
  +    BU.bind_opt tbody (fun tbody ->
  +      BU.bind_opt (universe_of_well_typed_term env tbody) (fun u ->
  +      Some (S.mk (Tm_arrow(bs, f tbody (Some u))) t.pos))))
   
     | Tm_arrow(bs, c) ->
       let bs, c = SS.open_comp bs c in
  
positive.code:   | _ -> failwith "Impossible!"
  
  and universe_of_well_typed_term env t =
    match type_of_well_typed_term env t with
    | Some ({n=Tm_type u}) -> Some u
    | _ -> None
  
  let type_of_well_typed_tot_or_gtot_term env t = type_of_well_typed_term env t
  
  
negative.code:   let env = Env.set_expected_typ ({env with use_bv_sorts=true}) k in
  
    let slow_path (reason:string) (topt:option<term>) =
      if false //reason <> "" //Env.debug env <| Options.Other "FastImplicits"
      then BU.print5 "Fast check for (%s <: %s) at %s failed because %s %s\n"
             (Print.term_to_string t)
             (Print.term_to_string k)
  