sig
  exception PPL_arithmetic_overflow of string
  exception PPL_timeout_exception
  exception PPL_internal_error of string
  exception PPL_unknown_standard_exception of string
  exception PPL_unexpected_error of string
  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 bounded_integer_type_overflow =
      Overflow_Wraps
    | Overflow_Undefined
    | Overflow_Impossible
  type bounded_integer_type_representation = Unsigned | Signed_2_Complement
  type bounded_integer_type_width =
      Bits_8
    | Bits_16
    | Bits_32
    | Bits_64
    | Bits_128
  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
  type pip_problem_status = Unfeasible_Pip_Problem | Optimized_Pip_Problem
  type pip_problem_control_parameter_name =
      Cutting_Strategy
    | Pivot_Row_Strategy
  type pip_problem_control_parameter_value =
      Cutting_Strategy_First
    | Cutting_Strategy_Deepest
    | Cutting_Strategy_All
    | Pivot_Row_Strategy_First
    | Pivot_Row_Strategy_Max_Column
  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_io_wrap_string : string -> int -> int -> int -> string
  val ppl_max_space_dimension : unit -> int
  val ppl_Coefficient_bits : unit -> int
  val ppl_Coefficient_is_bounded : unit -> bool
  val ppl_Coefficient_max : unit -> Gmp.Z.t
  val ppl_Coefficient_min : unit -> Gmp.Z.t
  val ppl_Linear_Expression_is_zero :
    Ppl_ocaml_globals.linear_expression -> bool
  val ppl_Linear_Expression_all_homogeneous_terms_are_zero :
    Ppl_ocaml_globals.linear_expression -> bool
  val ppl_set_rounding_for_PPL : unit -> unit
  val ppl_restore_pre_PPL_rounding : unit -> unit
  val ppl_irrational_precision : unit -> int
  val ppl_set_irrational_precision : int -> unit
  val ppl_set_timeout : int -> unit
  val ppl_reset_timeout : unit -> unit
  val ppl_set_deterministic_timeout : int -> unit
  val ppl_reset_deterministic_timeout : 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_integer_space_dimensions :
    Ppl_ocaml_globals.mip_problem -> int list
  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
  val ppl_MIP_Problem_ascii_dump : Ppl_ocaml_globals.mip_problem -> string
  type pip_problem
  type pip_tree_node
  type artificial_parameter = Ppl_ocaml_globals.linear_expression * Gmp.Z.t
  val ppl_new_PIP_Problem_from_space_dimension :
    int -> Ppl_ocaml_globals.pip_problem
  val ppl_new_PIP_Problem :
    int ->
    Ppl_ocaml_globals.constraint_system ->
    int list -> Ppl_ocaml_globals.pip_problem
  val ppl_PIP_Problem_space_dimension : Ppl_ocaml_globals.pip_problem -> int
  val ppl_PIP_Problem_parameter_space_dimensions :
    Ppl_ocaml_globals.pip_problem -> int list
  val ppl_PIP_Problem_constraints :
    Ppl_ocaml_globals.pip_problem -> Ppl_ocaml_globals.constraint_system
  val ppl_PIP_Problem_add_space_dimensions_and_embed :
    Ppl_ocaml_globals.pip_problem -> int -> int -> unit
  val ppl_PIP_Problem_add_to_parameter_space_dimensions :
    Ppl_ocaml_globals.pip_problem -> int list -> unit
  val ppl_PIP_Problem_add_constraint :
    Ppl_ocaml_globals.pip_problem ->
    Ppl_ocaml_globals.linear_constraint -> unit
  val ppl_PIP_Problem_add_constraints :
    Ppl_ocaml_globals.pip_problem ->
    Ppl_ocaml_globals.constraint_system -> unit
  val ppl_PIP_Problem_is_satisfiable : Ppl_ocaml_globals.pip_problem -> bool
  val ppl_PIP_Problem_solve :
    Ppl_ocaml_globals.pip_problem -> Ppl_ocaml_globals.pip_problem_status
  val ppl_PIP_Problem_solution :
    Ppl_ocaml_globals.pip_problem -> Ppl_ocaml_globals.pip_tree_node
  val ppl_PIP_Problem_optimizing_solution :
    Ppl_ocaml_globals.pip_problem -> Ppl_ocaml_globals.pip_tree_node
  val ppl_PIP_Problem_get_big_parameter_dimension :
    Ppl_ocaml_globals.pip_problem -> int
  val ppl_PIP_Problem_set_big_parameter_dimension :
    Ppl_ocaml_globals.pip_problem -> int -> unit
  val ppl_PIP_Problem_has_big_parameter_dimension :
    Ppl_ocaml_globals.pip_problem -> bool
  val ppl_PIP_Problem_OK : Ppl_ocaml_globals.pip_problem -> bool
  val ppl_PIP_Problem_clear : Ppl_ocaml_globals.pip_problem -> unit
  val ppl_PIP_Problem_set_control_parameter :
    Ppl_ocaml_globals.pip_problem ->
    Ppl_ocaml_globals.pip_problem_control_parameter_value -> unit
  val ppl_PIP_Problem_get_control_parameter :
    Ppl_ocaml_globals.pip_problem ->
    Ppl_ocaml_globals.pip_problem_control_parameter_name ->
    Ppl_ocaml_globals.pip_problem_control_parameter_value
  val ppl_PIP_Problem_swap :
    Ppl_ocaml_globals.pip_problem -> Ppl_ocaml_globals.pip_problem -> unit
  val ppl_PIP_Problem_ascii_dump : Ppl_ocaml_globals.pip_problem -> string
  val ppl_PIP_Tree_Node_constraints :
    Ppl_ocaml_globals.pip_tree_node -> Ppl_ocaml_globals.constraint_system
  val ppl_PIP_Tree_Node_artificials :
    Ppl_ocaml_globals.pip_tree_node ->
    Ppl_ocaml_globals.artificial_parameter list
  val ppl_PIP_Tree_Node_ascii_dump :
    Ppl_ocaml_globals.pip_tree_node -> string
  val ppl_PIP_Tree_Node_OK : Ppl_ocaml_globals.pip_tree_node -> bool
  val ppl_PIP_Tree_Node_is_bottom : Ppl_ocaml_globals.pip_tree_node -> bool
  val ppl_PIP_Tree_Node_is_solution : Ppl_ocaml_globals.pip_tree_node -> bool
  val ppl_PIP_Tree_Node_parametric_values :
    Ppl_ocaml_globals.pip_tree_node ->
    int -> Ppl_ocaml_globals.linear_expression
  val ppl_PIP_Tree_Node_is_decision : Ppl_ocaml_globals.pip_tree_node -> bool
  val ppl_PIP_Tree_Node_true_child :
    Ppl_ocaml_globals.pip_tree_node -> Ppl_ocaml_globals.pip_tree_node
  val ppl_PIP_Tree_Node_false_child :
    Ppl_ocaml_globals.pip_tree_node -> Ppl_ocaml_globals.pip_tree_node
end