anchor.diff:              let abs = Choice.get <| mk_abs(gv, Choice.get <| subst [gv, stm] tm)
               let _, tmin0, tyin0 = Choice.get <| term_match [] pred abs
               CONV_RULE beta_fn (INST tmin (INST tmin0 (INST_TYPE tyin0 th)))
  +
       fun ths top tm ->
           (Choice.attemptNested <| fun () ->
               higher_rewrite_conv ths top tm) : thm
  
positive.code:                     | Failure _ -> 
                          let rth = ho_betas bcs rpat rtm
                          Choice.get <| mk_comb(ltm, rth)
      fun (bcs, tmin, tyin) tm ->
          Choice.attempt <| fun () ->
              let itm = 
  
negative.code:     choice {
          let! l, r = Choice.bind (dest_imp << concl) th
          let ath = cnv l
          return!
              MP th (EQT_ELIM ath)
              |> Choice.bindError (fun _ -> MP th ath)
      }    
  
  (* ------------------------------------------------------------------------- *)
  