module Term : sig type t val make : string -> Num.num -> t val of_int : int -> t val get_coef : t -> Num.num val get_var : t -> string val minus : t -> t ... end;;
module Form : sig type t val make : Term.t list -> t ... val add : t -> t -> t val mult : t -> Num.num -> t ... val eq : t -> t -> bool val lt : t -> t -> bool val subst : t -> (string * t) list -> t ... end;;
module Expr : sig type t val of_form : Form.t -> t val make : string -> t list -> t val add : t -> t -> t val mult : t -> t -> t val quo : t -> t -> t val modulo : t -> t -> t ... val eq : t -> t -> bool val subst : t -> (string * Form.t) list -> t ... end;;
module Ineq : sig type t val build_eq : Expr.t -> Expr.t -> t val build_le : Expr.t -> Expr.t -> t val build_gt : Expr.t -> Expr.t -> t ... val e_of_t : t -> t val t_of_e : t -> t val not : t -> t ... end;;
module System : sig type t exception Empty val make : Ineq.t list -> t val add_ineq : Ineq.t -> t -> t val combine : t -> t -> t ... val simplify : string list -> string list -> t -> t val linearize : t -> t ... end;;
module Quast = sig type tag;; type t;; val bottom : t val leaf : Form.t list -> tag -> t val branch : Ineq.t -> t -> t -> t ... val get_paths : t -> System.t list val flatten : t -> (System.t * (Form.t list) * tag) list ... val simpl : System.t -> t -> t val simplify : System.t -> t -> t ... val map : (t -> t) -> t -> t val min : System.t -> t -> t -> t val max : System.t -> t -> t -> t ... end;;
module Modulo : sig type t val make : Form.t -> Num.num -> t val to_system : string -> t -> System.t ... end;;
module NewPar : sig type t val make : (string * Modulo.t) list -> t val new_name : string list -> string val add : string -> Modulo.t -> t -> t val find : string -> t -> Modulo.t val remove : string -> t -> t val iter : (string -> Modulo.t -> unit) -> t -> unit val fold : (string -> Modulo.t -> 'a -> 'a) -> t -> 'a -> 'a val combine : t -> t -> t val to_system : t -> System.t ... end;;
module EQuast = sig type tag type quast type t val make : quast -> NewPar.t -> t val flatten : t -> (System.t * (Form.t list) * tag) list val unify : t -> t val simplify : System.t -> t -> t val map : (quast -> quast) -> t -> t val min : System.t -> t -> t -> t val max : System.t -> t -> t -> t ... end;;
module Question : sig type t val min_lex : string list -> t val max_lex : string list -> t val min_fun : Form.t -> t val max_fun : Form.t -> t ... end;;
module PIP : sig type t val make : System.t -> Question.t -> t val solve : t -> EQuast.t val solve_ratio : t -> EQuast.t ... end;;
module Function : sig type t val make : (string * Form.t) list -> t val list_invars : t -> string list val list_outvars : t -> string list ... end;;
module Rays : sig type t val of_matrix : string list -> Num.num array array -> t val to_matrix : t -> Num.num array array ... end;;
module Polyhedron : sig type t type expr_quast = ( t * Expr.t ) list val make : System.t -> Rays.t -> t val of_rays : Rays.t -> t val of_system : System.t -> t ... val rename : ( string * string ) list -> t -> t val expand : string list -> t -> t val subset : t -> t -> bool val inter : t -> t -> t val union : t -> t -> t ... val image : t -> Function.t -> t val enum : t -> t -> expr_quast val enumeration : string list -> t -> expr_quast ... end;;