anchor.diff:        let fth = INSTANTIATE insts ath in
         if hyp fth <> hyp ath then failwith "PART_MATCH: instantiated hyps" else
         let tm' = partfn (concl fth) in
  -      if Pervasives.compare tm' tm = 0 then fth else
  +      if compare tm' tm = 0 then fth else
         try SUBS[ALPHA tm' tm] fth
         with Failure _ -> failwith "PART_MATCH: Sanity check failure"
  -  and GEN_PART_MATCH partfn th =
  +  let GEN_PART_MATCH partfn th =
       let sth = SPEC_ALL th in
       let bod = concl sth in
       let pbod = partfn bod in
  
positive.code:       mapfilter (fun p -> if can (term_match [] p) t then p else fail())
                  (lookup t mnet) in
      fun top tm ->
        let pred t = not (look_fn t = []) & free_in t tm in
        let stm = if top then find_term pred tm
                  else hd(sort free_in (find_terms pred tm)) in
        let pat = hd(look_fn stm) in
  
negative.code: (* ------------------------------------------------------------------------- *)
  
  let new_definition tm =
    let avs,bod = strip_forall tm
    let l,r = 
      try dest_eq bod
      with Failure _ -> failwith "new_definition: Not an equation"
    let lv,largs = strip_comb l
    let rtm = 
      try list_mk_abs(largs,r)
      with Failure _ -> failwith "new_definition: Non-variable in LHS pattern"
    let def = mk_eq(lv,rtm)
    let th1 = new_basic_definition def
    let th2 = 
      rev_itlist (fun tm th -> 
        let ith = AP_THM th tm
        TRANS ith (BETA_CONV(rand(concl ith)))) largs th1
    let rvs = filter (not << C mem avs) largs in
    itlist GEN rvs (itlist GEN avs th2);;
  