anchor.diff:  (* Abbreviation tactics.                                                     *)
   (* ------------------------------------------------------------------------- *)
   /// Tactic to introduce an abbreviation.
  -let ABBREV_TAC tm = 
  +let ABBREV_TAC tm : tactic =
       let cvs, t = Choice.get <| dest_eq tm
       let v, vs = strip_comb cvs
       let rs = list_mk_abs(vs, t)
  
positive.code: // basic_congs: Lists the congruence rules used by the simplifier.
  let set_basic_congs, extend_basic_congs, basic_congs = 
      let congs = ref([] : thm list)
      (fun thl -> congs := thl), 
      (fun thl -> congs := union' equals_thm thl (!congs)), (fun () -> !congs)
  
  (* ------------------------------------------------------------------------- *)
  (* Main rewriting conversions.                                               *)
  
negative.code: (* Rewriting (and application of other conversions) based on a convnet.      *)
  (* ------------------------------------------------------------------------- *)
  /// Apply a prioritized conversion net to the term at the top level.
  let REWRITES_CONV (net : net<int * (term -> 'T)>) tm =
      choice {
      let! pconvs = lookup tm net
      match tryfind (fun (_, cnv) -> Some <| cnv tm) pconvs with
      | Some result ->
          return result
      | None ->
          return!
              Choice.failwith "tryfind"
              |> Choice.mapError (fun e ->
                  nestedFailure e "REWRITES_CONV")
      }
      // TEMP : Until call sites can be modified, we have to raise the exception
      // contained in the error value (if the result of this function is an error).
      |> ExtCore.Choice.bindOrRaise
  
  (* ------------------------------------------------------------------------- *)
  (* Decision procedures may accumulate their state in different ways (e.g.    *)
  