sig
  type rule = TopDown.S.T.t * TopDown.S.T.t
  type t
  val create : unit -> TopDown.S.Rewriting.t
  val copy : TopDown.S.Rewriting.t -> TopDown.S.Rewriting.t
  val add : TopDown.S.Rewriting.t -> TopDown.S.Rewriting.rule -> unit
  val add_list :
    TopDown.S.Rewriting.t -> TopDown.S.Rewriting.rule list -> unit
  val to_list : TopDown.S.Rewriting.t -> TopDown.S.Rewriting.rule list
  val rewrite_root : TopDown.S.Rewriting.t -> TopDown.S.T.t -> TopDown.S.T.t
  val rewrite : TopDown.S.Rewriting.t -> TopDown.S.T.t -> TopDown.S.T.t
end