anchor.diff:          | Failure _ -> REFL tm
       conv
   
  -///(* ------------------------------------------------------------------------- *)
  -///(* Eliminate conditionals; CONDS_ELIM_CONV aims for disjunctive splitting,   *)
  -///(* for refutation procedures, and CONDS_CELIM_CONV for conjunctive.          *)
  -///(* Both switch modes "sensibly" when going through a quantifier.             *)
  -///(* ------------------------------------------------------------------------- *)
  +(* ------------------------------------------------------------------------- *)
  +(* Eliminate conditionals; CONDS_ELIM_CONV aims for disjunctive splitting,   *)
  +(* for refutation procedures, and CONDS_CELIM_CONV for conjunctive.          *)
  +(* Both switch modes "sensibly" when going through a quantifier.             *)
  +(* ------------------------------------------------------------------------- *)
   let CONDS_ELIM_CONV, CONDS_CELIM_CONV = 
       let th_cond = 
         prove ((parse_term "((b <=> F) ==> x = x0) /\ ((b <=> T) ==> x = x1)
  
positive.code:         | _ -> REFL tm
      assoc
  
  ///(* ------------------------------------------------------------------------- *)
  ///(* Eliminate select terms from a goal.                                       *)
  ///(* ------------------------------------------------------------------------- *)
  let SELECT_ELIM_TAC = 
      let SELECT_ELIM_CONV = 
          let SELECT_ELIM_THM = 
  
negative.code:         TRANS th (strengthen(rand(concl th)))
      weakcnf, strongcnf
  
  (* ------------------------------------------------------------------------- *)
  (* Simply right-associate w.r.t. a binary operator.                          *)
  (* ------------------------------------------------------------------------- *)
  let ASSOC_CONV th = 
      let th' = SYM(SPEC_ALL th)
      let opx, yopz = dest_comb(rhs(concl th'))
  