anchor.diff:        let fth = itlist (fun v th -> snd(SPEC_VAR th)) fvs eth 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" in
     PART_MATCH,GEN_PART_MATCH;;
  
positive.code: (* ------------------------------------------------------------------------- *)
  
  let new_definition tm =
    let avs,bod = strip_forall tm in
    let l,r = try dest_eq bod
      with Failure _ -> failwith "new_definition: Not an equation" in
    let lv,largs = strip_comb l in
    let rtm = try list_mk_abs(largs,r)
      with Failure _ -> failwith "new_definition: Non-variable in LHS pattern" in
    let def = mk_eq(lv,rtm) in
    let th1 = new_basic_definition def in
    let th2 = rev_itlist
      (fun tm th -> let ith = AP_THM th tm in
                    TRANS ith (BETA_CONV(rand(concl ith)))) largs th1 in
    let rvs = filter (not o C mem avs) largs in
    itlist GEN rvs (itlist GEN avs th2);;
  
  *)
  
  
negative.code: open equal
  open bool
  
  
  (* ------------------------------------------------------------------------- *)
  (* Type of instantiations, with terms, types and higher-order data.          *)
  