anchor.diff:  let smt : tac<unit> =
       bind cur_goal (fun g ->
       if is_irrelevant g then
  -        bind dismiss (fun _ -> add_smt_goals [g])
  +        bind __dismiss (fun _ -> add_smt_goals [g])
       else
           fail1 "goal is not irrelevant: cannot dispatch to smt (%s)" (tts g.context g.goal_ty)
       )
  
positive.code:     let ctx = g.context in
      let ctx' = Env.rem_proof_ns ctx (path_of_text s) in
      let g' = { g with context = ctx' } in
      bind dismiss (fun _ -> add_goals [g']))
  
  let addns (s:string) : tac<unit> =
      bind cur_goal (fun g ->
      let ctx = g.context in
      let ctx' = Env.add_proof_ns ctx (path_of_text s) in
      let g' = { g with context = ctx' } in
      bind dismiss (fun _ -> add_goals [g']))
  
  let rec tac_fold_env (d : direction) (f : env -> term -> tac<term>) (env : env) (t : term) : tac<term> =
      let tn = (SS.compress t).n in
  
negative.code: let trysolve (goal : goal) (solution : term) : tac<bool> =
      do_unify goal.context solution goal.witness
  
  let __dismiss : tac<unit> =
      bind get (fun p ->
      set ({p with goals=List.tl p.goals}))
  
  let dismiss : tac<unit> =
      bind get (fun p ->
      match p.goals with
      | [] -> fail "dismiss: no more goals"
      | _ -> __dismiss)
  
  let solve (goal : goal) (solution : term) : tac<unit> =
      bind (trysolve goal solution) (fun b ->
      if b
      then __dismiss
      else fail (BU.format3 "%s does not solve %s : %s"
                (tts goal.context solution)
                (tts goal.context goal.witness)
  