anchor.diff:      | [_] -> ret a
       | _ -> fail "expected at most one goal remaining"))
   
  -let merge_sub_goals : tac<unit> = failwith "NYI"
  +let merge_sub_goals : tac<unit> = fun p -> failwith "Not yet implemented: merge_sub_goals"
   
   let visit_strengthen (try_strengthen:tac<unit>)
       : tac<unit>
  
positive.code:                         ret ())))
  
  let rec simplify_eq_impl : tac<unit>
      = with_cur_goal (fun goal ->
        match destruct_equality_imp goal.goal_ty with
        | Some (x, e, rhs) ->
          bind imp_intro (fun eq_h ->
          bind (rewrite x e) (fun _ ->
          bind (exact eq_h) (fun _ ->
          //get rid of the eq_h in the context
          bind (clear_hd eq_h) (fun _ ->
          //dismiss the first sub-goal, i.e., prove that x=e
          //recursively visit rhs[e/x]
          visit_strengthen simplify_eq_impl))))
        | _ ->
          fail "Not an equality implication")
negative.code: 
  let intros_no_names = bind intros (fun _ -> ret ())
  
  let imp_intro : tac<name> = fun p -> failwith "Not yet implemented: imp_intro"
  
  let split : tac<unit>
      = with_cur_goal (fun goal ->
  