anchor.diff:   g
   
   let subtype_fail env t1 t2 = 
  -    raise (Error(Tc.Errors.basic_type_error env None t2 t1, Tc.Env.get_range env))
  +    raise (Error(Tc.Errors.basic_type_error env None t2 t1, Tc.Env.get_range env))
   
   let subtype env t1 t2 : guard_t = 
     if debug env Low then Util.fprint1 "(%s) Subtype test \n" (Range.string_of_range <| Env.get_range env);
  
positive.code:  if debug env <| Other "Rel" then Util.fprint2 "try_subkind of %s and %s\n" (Print.kind_to_string k1) (Print.kind_to_string k2);
   let prob  = KProb(SUB, whnf_k env k1, whnf_k env k2) in
   Util.must <| solve_and_commit env None prob (fun _ -> 
      raise (Error(Tc.Errors.incompatible_kinds env k1 k2, Tc.Env.get_range env)))
  
  let try_subtype env t1 t2 = 
   if debug env <| Other "Rel" then Util.fprint2 "try_subtype of %s and %s\n" (Print.typ_to_string t1) (Print.typ_to_string t2);
  
negative.code:   | TProb(rel, k1, k2) -> Util.format5 "\t%s (%s) \n\t\t%s\n\t%s (%s)" (Print.typ_to_string k1) (Print.tag_of_typ k1) (rel_to_string rel) (Print.typ_to_string k2) (Print.tag_of_typ k2)
    | EProb(rel, k1, k2) -> Util.format3 "\t%s \n\t\t%s\n\t%s" (Print.exp_to_string k1) (rel_to_string rel) (Print.exp_to_string k2)
    | CProb(rel, k1, k2) -> 
      Util.format3 "\t%s \n\t\t%s\n\t%s" (Normalize.comp_typ_norm_to_string env k1) (rel_to_string rel) (Normalize.comp_typ_norm_to_string env k2)
  //let prob_to_string (env:Env.env) (p:prob) = "<prob>"
  type uvar_inst =  //never a uvar in the co-domain of this map
    | UK of uvar_k * knd 
  