sig
  type config = Config.config
  type literal = Term.literal
  type choice_point = State.choice_point
  type subst = Subst.subst
  type complexity = int
  class type bound =
    object
      method backtrack : unit
      method compare_complexity : Bound.complexity -> Bound.complexity -> int
      method complexity_to_string : Bound.complexity -> string
      method current_bound : Bound.complexity
      method dropped_choice_point : Bound.choice_point option
      method exceeds : Bound.complexity -> bool
      method exceeds_current : Bound.complexity -> Bound.choice_point -> bool
      method get_complexity : Bound.literal -> Bound.complexity
      method get_complexity_subst :
        Bound.literal -> Bound.subst -> int -> Bound.complexity
      method has_min_exceeding : bool
      method incomplete : unit
      method is_derivation_incomplete : bool
      method print_statistic : unit
      method register : Bound.complexity -> Bound.choice_point -> bool
      method register_subst :
        Bound.literal -> Bound.subst -> int -> Bound.choice_point -> bool
      method restart : keep_bound:bool -> unit
    end
  val create : inc:bool -> Bound.config -> Bound.bound
  val create_BS : Bound.config -> Bound.bound
end