anchor.diff:  let trysolve (goal : goal) (solution : term) : bool =
       do_unify goal.context solution goal.witness
   
  -let solve (goal : goal) (solution : term) : unit =
  -    if trysolve goal solution
  -    then ()
  -    else raise (TacFailure(BU.format3 "%s does not solve %s : %s"
  -                          (N.term_to_string goal.context solution)
  -                          (N.term_to_string goal.context goal.witness)
  -                          (N.term_to_string goal.context goal.goal_ty)))
  -
   let dismiss : tac<unit> =
       bind get (fun p ->
       set ({p with goals=List.tl p.goals}))
  +
  +let solve (goal : goal) (solution : term) : tac<unit> =
  +    if trysolve goal solution
  +    then dismiss
  +    else fail (BU.format3 "%s does not solve %s : %s"
  +              (N.term_to_string goal.context solution)
  +              (N.term_to_string goal.context goal.witness)
  +              (N.term_to_string goal.context goal.goal_ty))
   
   let dismiss_all : tac<unit> =
       bind get (fun p ->
  
positive.code:         | Tm_fvar fv, [_; (l, _); (r, _)] when S.fv_eq_lid fv PC.eq2_lid ->
              if not (do_unify g.context l r)
              then fail2 "trefl: not a trivial equality (%s vs %s)" (N.term_to_string g.context l) (N.term_to_string g.context r)
              else
              begin
                  solve g U.exp_unit;
                  dismiss
              end
          | hd, _ ->
              fail1 "trefl: not an equality (%s)" (N.term_to_string g.context t)
          end
  
negative.code: let trivial : tac<unit> =
      bind cur_goal (fun goal ->
      if istrivial goal.context goal.goal_ty
      then solve goal U.exp_unit
      else fail1 "Not a trivial goal: %s" (N.term_to_string goal.context goal.goal_ty)
      )
  
  