anchor.diff:      : tac<'a>
       = kernel_tac "or_else" (fun p ->
   //        let tx = Unionfind.new_transaction () in
  -        debug p (BU.format1 "or_else: trying %s" t1.tac_name);
           match t1.tac_f p with
           | Failed _ ->
   //          Unionfind.rollback tx;
  -          debug p (BU.format2 "or_else: %s failed; trying %s" t1.tac_name t2.tac_name);
             t2.tac_f p
           | q -> q)
   
  
positive.code:     BU.print1 ">>>>>%s\n" msg;
      Failed(msg, p))
  
  let show = kernel_tac "show" (fun p -> debug p "debug"; Success((), p))
  ////////////////////////////////////////////////////////////////////
  (* Some TRUSTED internal utilities *)
  
  
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")
  
  