anchor.diff:   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)))
  +    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);
  
positive.code:         | None -> Tc.Env.get_range env
          | Some t -> t.pos in
        match t with 
          | None -> raise (Error(Tc.Errors.incompatible_kinds env k2 k1, r))
          | Some t -> raise (Error(Tc.Errors.expected_typ_of_kind env k2 t k1, r)))
      
  let teq env t1 t2 : guard_t = 
   if debug env <| Other "Rel" then Util.fprint2 "teq 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 
  