sig
  type degenerate_element = Universe | Empty
  type linear_expression =
      Variable of int
    | Coefficient of Gmp.Z.t
    | Unary_Plus of Ppl_ocaml_globals.linear_expression
    | Unary_Minus of Ppl_ocaml_globals.linear_expression
    | Plus of Ppl_ocaml_globals.linear_expression *
        Ppl_ocaml_globals.linear_expression
    | Minus of Ppl_ocaml_globals.linear_expression *
        Ppl_ocaml_globals.linear_expression
    | Times of Gmp.Z.t * Ppl_ocaml_globals.linear_expression
  type linear_constraint =
      Less_Than of Ppl_ocaml_globals.linear_expression *
        Ppl_ocaml_globals.linear_expression
    | Less_Or_Equal of Ppl_ocaml_globals.linear_expression *
        Ppl_ocaml_globals.linear_expression
    | Equal of Ppl_ocaml_globals.linear_expression *
        Ppl_ocaml_globals.linear_expression
    | Greater_Than of Ppl_ocaml_globals.linear_expression *
        Ppl_ocaml_globals.linear_expression
    | Greater_Or_Equal of Ppl_ocaml_globals.linear_expression *
        Ppl_ocaml_globals.linear_expression
  type linear_generator =
      Line of Ppl_ocaml_globals.linear_expression
    | Ray of Ppl_ocaml_globals.linear_expression
    | Point of Ppl_ocaml_globals.linear_expression * Gmp.Z.t
    | Closure_Point of Ppl_ocaml_globals.linear_expression * Gmp.Z.t
  type linear_grid_generator =
      Grid_Line of Ppl_ocaml_globals.linear_expression
    | Grid_Parameter of Ppl_ocaml_globals.linear_expression * Gmp.Z.t
    | Grid_Point of Ppl_ocaml_globals.linear_expression * Gmp.Z.t
  type poly_gen_relation = Subsumes
  type poly_con_relation =
      Is_Disjoint
    | Strictly_Intersects
    | Is_Included
    | Saturates
  type relation_with_congruence =
      Is_Disjoint
    | Strictly_Intersects
    | Is_Included
  type linear_congruence =
      Ppl_ocaml_globals.linear_expression *
      Ppl_ocaml_globals.linear_expression * Gmp.Z.t
  type constraint_system = Ppl_ocaml_globals.linear_constraint list
  type generator_system = Ppl_ocaml_globals.linear_generator list
  type grid_generator_system = Ppl_ocaml_globals.linear_grid_generator list
  type congruence_system = Ppl_ocaml_globals.linear_congruence list
  type relation_symbol =
      Less_Than_RS
    | Less_Or_Equal_RS
    | Equal_RS
    | Greater_Than_RS
    | Greater_Or_Equal_RS
  type complexity_class =
      Polynomial_Complexity
    | Simplex_Complexity
    | Any_Complexity
  type optimization_mode = Minimization | Maximization
  type mip_problem_status =
      Unfeasible_Mip_Problem
    | Unbounded_Mip_Problem
    | Optimized_Mip_Problem
  type control_parameter_name = Pricing
  type control_parameter_value =
      Pricing_Steepest_Edge_Float
    | Pricing_Steepest_Edge_Exact
    | Pricing_Textbook
  val ppl_version_major : unit -> int
  val ppl_version_minor : unit -> int
  val ppl_version_revision : unit -> int
  val ppl_version_beta : unit -> int
  val ppl_version : unit -> string
  val ppl_banner : unit -> string
  val ppl_set_rounding_for_PPL : unit -> unit
  val ppl_restore_pre_PPL_rounding : unit -> unit
  type mip_problem
  val ppl_new_MIP_Problem_from_space_dimension :
    int -> Ppl_ocaml_globals.mip_problem
  val ppl_new_MIP_Problem :
    int ->
    Ppl_ocaml_globals.constraint_system ->
    Ppl_ocaml_globals.linear_expression ->
    Ppl_ocaml_globals.optimization_mode -> Ppl_ocaml_globals.mip_problem
  val ppl_MIP_Problem_space_dimension : Ppl_ocaml_globals.mip_problem -> int
  val ppl_MIP_Problem_constraints :
    Ppl_ocaml_globals.mip_problem -> Ppl_ocaml_globals.constraint_system
  val ppl_MIP_Problem_add_space_dimensions_and_embed :
    Ppl_ocaml_globals.mip_problem -> int -> unit
  val ppl_MIP_Problem_add_to_integer_space_dimensions :
    Ppl_ocaml_globals.mip_problem -> int list -> unit
  val ppl_MIP_Problem_add_constraint :
    Ppl_ocaml_globals.mip_problem ->
    Ppl_ocaml_globals.linear_constraint -> unit
  val ppl_MIP_Problem_add_constraints :
    Ppl_ocaml_globals.mip_problem ->
    Ppl_ocaml_globals.constraint_system -> unit
  val ppl_MIP_Problem_set_objective_function :
    Ppl_ocaml_globals.mip_problem ->
    Ppl_ocaml_globals.linear_expression -> unit
  val ppl_MIP_Problem_is_satisfiable : Ppl_ocaml_globals.mip_problem -> bool
  val ppl_MIP_Problem_solve :
    Ppl_ocaml_globals.mip_problem -> Ppl_ocaml_globals.mip_problem_status
  val ppl_MIP_Problem_optimization_mode :
    Ppl_ocaml_globals.mip_problem -> Ppl_ocaml_globals.optimization_mode
  val ppl_MIP_Problem_feasible_point :
    Ppl_ocaml_globals.mip_problem -> Ppl_ocaml_globals.linear_generator
  val ppl_MIP_Problem_optimizing_point :
    Ppl_ocaml_globals.mip_problem -> Ppl_ocaml_globals.linear_generator
  val ppl_MIP_Problem_objective_function :
    Ppl_ocaml_globals.mip_problem -> Ppl_ocaml_globals.linear_expression
  val ppl_MIP_Problem_optimal_value :
    Ppl_ocaml_globals.mip_problem -> Gmp.Z.t * Gmp.Z.t
  val ppl_MIP_Problem_evaluate_objective_function :
    Ppl_ocaml_globals.mip_problem ->
    Ppl_ocaml_globals.linear_generator -> Gmp.Z.t * Gmp.Z.t
  val ppl_MIP_Problem_OK : Ppl_ocaml_globals.mip_problem -> bool
  val ppl_MIP_Problem_clear : Ppl_ocaml_globals.mip_problem -> unit
  val ppl_MIP_Problem_set_optimization_mode :
    Ppl_ocaml_globals.mip_problem ->
    Ppl_ocaml_globals.optimization_mode -> unit
  val ppl_MIP_Problem_set_control_parameter :
    Ppl_ocaml_globals.mip_problem ->
    Ppl_ocaml_globals.control_parameter_value -> unit
  val ppl_MIP_Problem_get_control_parameter :
    Ppl_ocaml_globals.mip_problem ->
    Ppl_ocaml_globals.control_parameter_name ->
    Ppl_ocaml_globals.control_parameter_value
  val ppl_MIP_Problem_swap :
    Ppl_ocaml_globals.mip_problem -> Ppl_ocaml_globals.mip_problem -> unit
end