anchor.diff:      fun tac1 tac2 g ->
         let _,gls,_ as gstate = tac1 g in
         tacsequence gstate (replicate tac2 (length gls))
  -  and (thenl_: tactic -> tactic list -> tactic) =
  +  let (thenl_: tactic -> tactic list -> tactic) =
       fun tac1 tac2l g ->
         let _,gls,_ as gstate = tac1 g in
         if gls = [] then tacsequence gstate []
  
positive.code:   fun ttac ante ->
      ASSUM_LIST
       (fun asl ->
          let tacs = mapfilter (fun imp -> ttac (MATCH_MP imp ante)) asl in
          if tacs = [] then failwith "IMP_RES_THEN"
          else EVERY tacs);;
  
  let (IMP_RES_THEN: thm_tactical) =
    fun ttac imp ->
      ASSUM_LIST
       (fun asl ->
          let tacs = mapfilter (fun ante -> ttac (MATCH_MP imp ante)) asl in
          if tacs = [] then failwith "IMP_RES_THEN"
          else EVERY tacs);;
  
  let STRIP_ASSUME_TAC =
    let DISCARD_TAC th =
  
negative.code:     let asl'',w'' = inst_goal i (asl,w) in
      let maxasms =
        itlist (fun (_,th) -> union (insert (concl th) (hyp th))) asl'' [] in
      if aconv w' w'' &&
         forall (fun t -> exists (aconv t) maxasms) (subtract asl' [false_tm])
      then res else failwith "VALID: Invalid tactic";;
  
  