anchor.diff:      BU.print1 ">>>>>%s\n" msg;
       Failed(msg, p))
   
  -let show = kernel_tac "show" (fun p -> debug p "debug"; Success((), p))
   ////////////////////////////////////////////////////////////////////
   (* Some TRUSTED internal utilities *)
   
  
positive.code:     = kernel_tac "bind"
          (fun p ->
  //        let tx = Unionfind.new_transaction () in //snapshot the state of the unionfind graph
              if not t1.kernel then debug p t1.tac_name;
              match t1.tac_f p with
              | Success (a, q) ->
                let t2 = t2 a in
                if not t2.kernel then debug q t2.tac_name;
                t2.tac_f q
              | Failed(msg, q) ->
              if not t1.kernel then debug p (BU.format1 "%s failed!" t1.tac_name);
      //          Unionfind.rollback tx; //and restore the snapshot in case the tactic fails
                Failed(msg, q)) //need to repack for tac<'b>
  
  
negative.code:                  {goal with witness=None;
                              goal_ty=a}) in
            bind dismiss (fun _ ->
            add_goals new_goals)
          | _ ->
            fail "Cannot split this goal; expected a conjunction")
  
  