sig
val i2e : int -> Facile.Arith.t
val fd2e : Facile.Var.Fd.t -> Facile.Arith.t
val ( +~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( *~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( -~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( /~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( **~ ) : Facile.Arith.t -> int -> Facile.Arith.t
val ( %~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( <=~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Cstr.t
val ( <~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Cstr.t
val ( >~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Cstr.t
val ( =~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Cstr.t
val ( <>~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Cstr.t
val ( >=~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Cstr.t
val ( <=~~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( <~~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( >~~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( =~~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( <>~~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( >=~~ ) : Facile.Arith.t -> Facile.Arith.t -> Facile.Arith.t
val ( &&~~ ) : Facile.Cstr.t -> Facile.Cstr.t -> Facile.Cstr.t
val ( ||~~ ) : Facile.Cstr.t -> Facile.Cstr.t -> Facile.Cstr.t
val ( =>~~ ) : Facile.Cstr.t -> Facile.Cstr.t -> Facile.Cstr.t
val ( <=>~~ ) : Facile.Cstr.t -> Facile.Cstr.t -> Facile.Cstr.t
val ( &&~ ) : Facile.Goals.t -> Facile.Goals.t -> Facile.Goals.t
val ( ||~ ) : Facile.Goals.t -> Facile.Goals.t -> Facile.Goals.t
module Fd :
sig
type t = Var.Fd.t
type attr = Var.Attr.t
type domain = Domain.t
type elt = Domain.elt
type event = Var.Attr.event
val create : ?name:string -> domain -> t
val interval : ?name:string -> elt -> elt -> t
val array : ?name:string -> int -> elt -> elt -> t array
val elt : elt -> t
val is_var : t -> bool
val is_bound : t -> bool
val value : t -> (attr, elt) Var.concrete
val min : t -> elt
val max : t -> elt
val min_max : t -> elt * elt
val elt_value : t -> elt
val int_value : t -> elt
val size : t -> int
val member : t -> elt -> bool
val id : t -> int
val name : t -> string
val compare : t -> t -> int
val equal : t -> t -> bool
val fprint : out_channel -> t -> unit
val fprint_array : out_channel -> t array -> unit
val unify : t -> elt -> unit
val refine : t -> domain -> unit
val refine_low : t -> elt -> unit
val refine_up : t -> elt -> unit
val refine_low_up : t -> elt -> elt -> unit
val on_refine : event
val on_subst : event
val on_min : event
val on_max : event
val delay : event list -> t -> ?waking_id:int -> Cstr.t -> unit
val int : elt -> t
val subst : t -> elt -> unit
val unify_cstr : t -> elt -> Cstr.t
val remove : t -> elt -> unit
val values : t -> elt list
val iter : (elt -> unit) -> t -> unit
end
type ('a, 'b) concrete' =
('a, 'b) Facile.Var.concrete =
Unk of 'a
| Val of 'b
type concrete_fd =
(Facile.Easy.Fd.attr, Facile.Easy.Fd.elt) Facile.Easy.concrete'
end