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