sig
  type inequality = Le | Gt | Eq
  type t
  exception UnsupportedConstraint
  exception NonRegularBounds
  val top : Constraint.t
  val constraint_atom :
    Indexes.t -> Constraint.inequality -> Indexes.t -> Constraint.t
  val bounds_constraint :
    Indexes.t -> Constraint.inequality -> Indexes.t -> Constraint.t
  val bounds_conjunction : Constraint.t -> Constraint.t -> Constraint.t
  val is_false : Constraint.t -> bool
  val is_equality : Constraint.t -> bool
  val to_string : ?parenthesized:bool -> Constraint.t -> string
  val print : Constraint.t -> unit
  val equal : Constraint.t -> Constraint.t -> bool
  val always_greater : ?hyp:Constraint.t -> Indexes.t -> Indexes.t -> bool
  val always_different : ?hyp:Constraint.t -> Indexes.t -> Indexes.t -> bool
  val normalize_index : Constraint.t -> idx:Indexes.t -> Indexes.t
end