sig
  type t
  type dim = int
  val pp :
    (Format.formatter -> int -> unit) ->
    Format.formatter -> Polynomial.Monomial.t -> unit
  val mul :
    Polynomial.Monomial.t -> Polynomial.Monomial.t -> Polynomial.Monomial.t
  val one : Polynomial.Monomial.t
  val mul_term :
    Polynomial.Monomial.dim ->
    int -> Polynomial.Monomial.t -> Polynomial.Monomial.t
  val singleton : Polynomial.Monomial.dim -> int -> Polynomial.Monomial.t
  val power : Polynomial.Monomial.dim -> Polynomial.Monomial.t -> int
  val enum :
    Polynomial.Monomial.t -> (Polynomial.Monomial.dim * int) BatEnum.t
  val of_enum :
    (Polynomial.Monomial.dim * int) BatEnum.t -> Polynomial.Monomial.t
  val equal : Polynomial.Monomial.t -> Polynomial.Monomial.t -> bool
  val compare : Polynomial.Monomial.t -> Polynomial.Monomial.t -> int
  val pivot :
    Polynomial.Monomial.dim ->
    Polynomial.Monomial.t -> int * Polynomial.Monomial.t
  val div :
    Polynomial.Monomial.t ->
    Polynomial.Monomial.t -> Polynomial.Monomial.t option
  val lcm :
    Polynomial.Monomial.t -> Polynomial.Monomial.t -> Polynomial.Monomial.t
  val lex :
    Polynomial.Monomial.t -> Polynomial.Monomial.t -> [ `Eq | `Gt | `Lt ]
  val deglex :
    Polynomial.Monomial.t -> Polynomial.Monomial.t -> [ `Eq | `Gt | `Lt ]
  val degrevlex :
    Polynomial.Monomial.t -> Polynomial.Monomial.t -> [ `Eq | `Gt | `Lt ]
  val block :
    (Polynomial.Monomial.dim -> bool) list ->
    (Polynomial.Monomial.t -> Polynomial.Monomial.t -> [ `Eq | `Gt | `Lt ]) ->
    Polynomial.Monomial.t -> Polynomial.Monomial.t -> [ `Eq | `Gt | `Lt ]
  val term_of :
    'Syntax.context ->
    (Polynomial.Monomial.dim -> 'Syntax.term) ->
    Polynomial.Monomial.t -> 'Syntax.term
end