sig
  type term = LogtkFOTerm.t
  type form = LogtkFormula.FO.t
  type t =
      RwTerm of LogtkRewriting.TRS.t
    | RwForm of LogtkRewriting.FormRW.t
    | Tr of string * (LogtkTransform.form -> LogtkTransform.form list)
  type transformation = LogtkTransform.t
  val of_term_rule :
    LogtkTransform.term * LogtkTransform.term -> LogtkTransform.t
  val of_term_rules :
    (LogtkTransform.term * LogtkTransform.term) list -> LogtkTransform.t
  val of_term_rules_seq :
    (LogtkTransform.term * LogtkTransform.term) Sequence.t ->
    LogtkTransform.t
  val of_form_rule :
    LogtkTransform.term * LogtkTransform.form -> LogtkTransform.t
  val of_form_rules :
    (LogtkTransform.term * LogtkTransform.form) list -> LogtkTransform.t
  val of_form_rules_seq :
    (LogtkTransform.term * LogtkTransform.form) Sequence.t ->
    LogtkTransform.t
  val of_term_tr :
    string ->
    (LogtkTransform.term -> LogtkTransform.term) -> LogtkTransform.t
  val open_and : LogtkTransform.t
  val remove_trivial : LogtkTransform.t
  val apply :
    LogtkTransform.t -> LogtkTransform.form -> LogtkTransform.form list
  val pp : Buffer.t -> LogtkTransform.t -> unit
  val fmt : Format.formatter -> LogtkTransform.t -> unit
  module type FORM =
    sig
      type t
      val of_form :
        rule:string ->
        parents:LogtkTransform.FORM.t list ->
        LogtkTransform.form -> LogtkTransform.FORM.t
      val to_form : LogtkTransform.FORM.t -> LogtkTransform.form
    end
  module type DAG =
    sig
      module Form : FORM
      type t
      val create :
        (string * LogtkTransform.transformation) list -> LogtkTransform.DAG.t
      val transform : LogtkTransform.DAG.t -> Form.t list -> Form.t list
    end
  module MakeDAG :
    functor (Form : FORM->
      sig
        module Form :
          sig
            type t = Form.t
            val of_form : rule:string -> parents:t list -> form -> t
            val to_form : t -> form
          end
        type t
        val create : (string * transformation) list -> t
        val transform : t -> Form.t list -> Form.t list
      end
  module FormDag :
    sig
      module Form :
        sig
          type t = form
          val of_form : rule:string -> parents:t list -> form -> t
          val to_form : t -> form
        end
      type t
      val create : (string * transformation) list -> t
      val transform : t -> Form.t list -> Form.t list
    end
end