anchor.diff:  (* --------------------------------------------------------- *)
   (* </new_uvar>                                               *)
   (* --------------------------------------------------------- *)
  -
  -let mk_eq2 env t1 t2 =
  -    (* NS: Rather than introducing a new variable, it would be much preferable
  -            to simply compute the type of t1 here.
  -            Sadly, it seems to be way too expensive to call env.type_of here.
  -    *)
  -    let t_type, u = U.type_u () in
  -    let tt, _ = new_uvar t1.pos (Env.all_binders env) t_type in
  -    U.mk_eq2 u tt t1 t2
   
   (* Instantiation of unification variables *)
   type uvi =
  
positive.code:               // GM: No. We could be in a contradictory environment.
                then let guard = if U.eq_tm t1 t2 = U.Equal
                                 then None
                                 else Some <| mk_eq2 env t1 t2 in
                     solve env (solve_prob orig guard [] wl)
                else rigid_rigid_delta env orig wl head1 head2 t1 t2
           else rigid_rigid_delta env orig wl head1 head2 t1 t2
  
negative.code:         end
      | _ -> (); //TODO
      ()
  
  let mk_eq2 prob t1 t2 =
      (* NS: Rather than introducing a new variable, it would be much preferable
              to simply compute the type of t1 here.
              Sadly, it seems to be way too expensive to call env.type_of here.
      *)
      let t_type, u = U.type_u () in
      let tt, _ = new_uvar t1.pos (p_scope prob) t_type in
      U.mk_eq2 u tt t1 t2
  
  let p_invert = function
     | TProb p -> TProb <| invert p
  