anchor.diff:  let solve (goal : goal) (solution : term) : tac<unit> =
       bind (trysolve goal solution) (fun b ->
       if b
  -    then __dismiss
  +    then bind __dismiss (fun () -> remove_solved_goals)
       else fail (BU.format3 "%s does not solve %s : %s"
                 (tts (goal_env goal) solution)
                 (tts (goal_env goal) (goal_witness goal))
                 (tts (goal_env goal) (goal_type goal))))
  +
  +let solve' (goal : goal) (solution : term) : tac<unit> =
  +    bind (set_solution goal solution) (fun () ->
  +    bind __dismiss (fun () ->
  +    remove_solved_goals))
   
   let dismiss_all : tac<unit> =
       bind get (fun p ->
  
positive.code:         Options.pop ();
      ret r))
  
  (*
     set_solution:
  
  
negative.code:        //NS: 01/24 ... looks redundant
          bind (add_implicits implicits.implicits) (fun _ ->
          // We solve with (), we don't care about the witness if applying a lemma
          bind (solve' goal U.exp_unit) (fun _ ->
          let is_free_uvar uv t =
              let free_uvars = List.map (fun x -> x.ctx_uvar_head) (BU.set_elements (SF.uvars t)) in
              List.existsML (fun u -> UF.equiv u uv) free_uvars
  