anchor.diff:     *)
   
     match (SS.compress top).n with
  -  | Tm_match(e1, ret_opt, eqns) ->  //ret_opt is the return annotation
  +  | Tm_match(e1, ret_opt, eqns, _) ->  //ret_opt is the return annotation
       let e1, c1, g1 = tc_term
         (env |> Env.clear_expected_typ |> fst |> instantiate_both)
         e1 in
  
positive.code:      then let subst = U.subst_of_list bs args in
            SS.subst subst res
       else level_of_type_fail env e (Print.term_to_string res)
     | Tm_match(_, _, hd::_) ->  //AR: TODO: use return annotation?
       let (_, _, hd) = SS.open_branch hd in
       universe_of_aux env hd
     | Tm_match(_, _, []) ->  //AR: TODO: use return annotation?
       level_of_type_fail env e "empty match cases"
  
  let universe_of env e =
  
negative.code: 
    | Tm_meta(t, _) -> typeof_tot_or_gtot_term_fastpath env t must_tot
  
    | Tm_match (_, _, _, Some rc) -> rc.residual_typ
    | Tm_match _
    | Tm_let _
    | Tm_unknown
  