anchor.diff:  // 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)
  +    (fun thl -> congs := thl),
  +    (fun thl -> congs := union' equals_thm thl (!congs)),
  +    (fun () -> !congs)
   
   (* ------------------------------------------------------------------------- *)
   (* Main rewriting conversions.                                               *)
  
positive.code: let GENERAL_REWRITE_CONV rep (cnvl : conv -> conv) (builtin_net : gconv net) thl = 
      let thl_canon = itlist (mk_rewrites false) thl []
      let final_net = itlist (net_of_thm rep) thl_canon builtin_net
      cnvl(REWRITES_CONV final_net)
  
  /// Rewrites a term, selecting terms according to a user-specified strategy.
  let GEN_REWRITE_CONV (cnvl : conv -> conv) thl = 
  
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.    *)
  