anchor.diff:          match (U.un_uinst hd).n, args with
           | Tm_fvar fv, [_; (l, _); (r, _)] when S.fv_eq_lid fv SC.eq2_lid ->
               if not (TcRel.teq_nosmt g.context l r)
  -            then fail (BU.format2 "trefl: not a trivial equality (%s vs %s)" (Print.term_to_string l) (Print.term_to_string r))
  +            then fail2 "trefl: not a trivial equality (%s vs %s)" (Print.term_to_string l) (Print.term_to_string r)
               else
               begin
                   let t_unit = FStar.TypeChecker.Common.t_unit in
  
positive.code:                 dismiss
              end
          | hd, _ ->
              fail (BU.format1 "trefl: not an equality (%s)" (Print.term_to_string t))
          end
       | None ->
          fail "not an irrelevant goal")
  
negative.code:           else ret ()) (fun _ ->
      let ret_typ = comp_to_typ comp in
      match Rel.try_teq false goal.context ret_typ goal.goal_ty with
      | None -> fail3 "apply: does not unify with goal: %s : %s vs %s"
                                   (Print.term_to_string tm)
                                   (Print.term_to_string ret_typ)
                                   (Print.term_to_string goal.goal_ty)
      | Some g ->
          let g = Rel.solve_deferred_constraints goal.context g |> Rel.resolve_implicits in
          let solution = S.mk_Tm_app tm uvs None goal.context.range in
  