module LuckyDraw:Time-stamp: <modified the 11/12/2006 (at 15:25) by Erwan Jahier>sig..end
The Boolean part is based on BDDS and the numeric part on convex Polyhedron (Polka, by B. Jeannet).
Example of use:
List.iter print_solution
(draw (solve (make_bool_expr ["x",Float] "x > 10.0 and x <= 20.0"))) ;;
List.iter print_solution
(draw (solve (make_bool_expr ["x",Bool; "y",Bool; "Z",Bool] "true"))) ;;
typevar_name =string
type var_type =
| |
Float |
| |
Int |
| |
Bool |
type value =
| |
F of |
| |
I of |
| |
B of |
type bool_expr
val make_bool_expr : (var_name * var_type) list ->
string -> bool_exprand, or, not, xor, =>, =, true,
false, if then else, <, <=, >, >=, +, *, -, /,
div, mod as well as variable identifiers and numeric (integer, float)
litterals.
e.g., make_bool_expr ["x", Bool; y, Int] "0 < y and y < 10"
bool_exprbool_expr using the following functions,
with obvious semantics.bool_expr constructorsval and_b : bool_expr -> bool_expr -> bool_exprval or_b : bool_expr -> bool_expr -> bool_exprval xor_b : bool_expr -> bool_expr -> bool_exprval impl_b : bool_expr -> bool_expr -> bool_exprval eq_b : bool_expr -> bool_expr -> bool_exprval not_b : bool_expr -> bool_exprval true_b : bool_exprval false_b : bool_exprval ite_b : bool_expr ->
bool_expr -> bool_expr -> bool_exprval var_b : string -> bool_exprtype int_expr
val var_i : string -> int_exprval val_i : int -> int_exprval eq_i : int_expr -> int_expr -> bool_exprval sup_i : int_expr -> int_expr -> bool_exprval supeq_i : int_expr -> int_expr -> bool_exprval inf_i : int_expr -> int_expr -> bool_exprval infeq_i : int_expr -> int_expr -> bool_exprval ite_i : bool_expr ->
int_expr -> int_expr -> int_exprval sum_i : int_expr -> int_expr -> int_exprval diff_i : int_expr -> int_expr -> int_exprval prod_i : int_expr -> int_expr -> int_exprval quot_i : int_expr -> int_expr -> int_exprval mod_i : int_expr -> int_expr -> int_exprval div_i : int_expr -> int_expr -> int_exprval uminus_i : int_expr -> int_exprtype float_expr
val var_f : string -> float_exprval val_f : float -> float_exprval eq_f : float_expr -> float_expr -> bool_exprval sup_f : float_expr -> float_expr -> bool_exprval supeq_f : float_expr -> float_expr -> bool_exprval inf_f : float_expr -> float_expr -> bool_exprval infeq_f : float_expr -> float_expr -> bool_exprval ite_f : bool_expr ->
float_expr -> float_expr -> float_exprval sum_f : float_expr -> float_expr -> float_exprval diff_f : float_expr -> float_expr -> float_exprval prod_f : float_expr -> float_expr -> float_exprval quot_f : float_expr -> float_expr -> float_exprval uminus_f : float_expr -> float_exprtypesubst =var_name * value
typesolution =subst list
type solutions_set
val solve : bool_expr -> solutions_settypedraw_mode =int * int * int
val draw : ?mode:draw_mode ->
?verbose:int -> solutions_set -> solution listval set_efficient_mode : unit -> unitval set_fair_mode : unit -> unitval string_of_value : value -> stringval bool_expr_to_string : bool_expr -> stringval print_solution : solution -> unitval set_seed : int -> unitval set_default_max_int : int -> unitval set_default_min_int : int -> unitval set_default_max_float : float -> unitval set_default_min_float : float -> unit