sig   module type ATTR =     sig       type t       type domain       type elt       type event       val dom : Fcl_var.ATTR.t -> Fcl_var.ATTR.domain       val on_refine : Fcl_var.ATTR.event       val on_subst : Fcl_var.ATTR.event       val on_min : Fcl_var.ATTR.event       val on_max : Fcl_var.ATTR.event       val fprint : Pervasives.out_channel -> Fcl_var.ATTR.t -> unit       val min : Fcl_var.ATTR.t -> Fcl_var.ATTR.elt       val max : Fcl_var.ATTR.t -> Fcl_var.ATTR.elt       val member : Fcl_var.ATTR.t -> Fcl_var.ATTR.elt -> bool       val id : Fcl_var.ATTR.t -> int       val constraints_number : Fcl_var.ATTR.t -> int       val size : Fcl_var.ATTR.t -> int     end   module Attr :     sig       type t       type domain = Fcl_domain.t       type elt = Fcl_domain.elt       type event       val dom : t -> domain       val on_refine : event       val on_subst : event       val on_min : event       val on_max : event       val fprint : out_channel -> t -> unit       val min : t -> elt       val max : t -> elt       val member : t -> elt -> bool       val id : t -> int       val constraints_number : t -> int       val size : t -> int     end   module SetAttr :     sig       type t       type domain = Fcl_setDomain.t       type elt = Fcl_setDomain.S.t       type event       val dom : t -> domain       val on_refine : event       val on_subst : event       val on_min : event       val on_max : event       val fprint : out_channel -> t -> unit       val min : t -> elt       val max : t -> elt       val member : t -> elt -> bool       val id : t -> int       val constraints_number : t -> int       val size : t -> int     end   type ('a, 'b) concrete = Unk of '| Val of 'b   module type BASICFD =     sig       type t       type attr       type domain       type elt       type event       val create :         ?name:string -> Fcl_var.BASICFD.domain -> Fcl_var.BASICFD.t       val interval :         ?name:string ->         Fcl_var.BASICFD.elt -> Fcl_var.BASICFD.elt -> Fcl_var.BASICFD.t       val array :         ?name:string ->         int ->         Fcl_var.BASICFD.elt -> Fcl_var.BASICFD.elt -> Fcl_var.BASICFD.t array       val elt : Fcl_var.BASICFD.elt -> Fcl_var.BASICFD.t       val is_var : Fcl_var.BASICFD.t -> bool       val is_bound : Fcl_var.BASICFD.t -> bool       val value :         Fcl_var.BASICFD.t ->         (Fcl_var.BASICFD.attr, Fcl_var.BASICFD.elt) Fcl_var.concrete       val min : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt       val max : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt       val min_max :         Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt * Fcl_var.BASICFD.elt       val elt_value : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt       val int_value : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt       val size : Fcl_var.BASICFD.t -> int       val member : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt -> bool       val id : Fcl_var.BASICFD.t -> int       val name : Fcl_var.BASICFD.t -> string       val compare : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.t -> int       val equal : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.t -> bool       val fprint : Pervasives.out_channel -> Fcl_var.BASICFD.t -> unit       val fprint_array :         Pervasives.out_channel -> Fcl_var.BASICFD.t array -> unit       val unify : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt -> unit       val refine : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.domain -> unit       val refine_low : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt -> unit       val refine_up : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt -> unit       val refine_low_up :         Fcl_var.BASICFD.t ->         Fcl_var.BASICFD.elt -> Fcl_var.BASICFD.elt -> unit       val on_refine : Fcl_var.BASICFD.event       val on_subst : Fcl_var.BASICFD.event       val on_min : Fcl_var.BASICFD.event       val on_max : Fcl_var.BASICFD.event       val delay :         Fcl_var.BASICFD.event list ->         Fcl_var.BASICFD.t -> ?waking_id:int -> Fcl_cstr.t -> unit       val int : Fcl_var.BASICFD.elt -> Fcl_var.BASICFD.t       val subst : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt -> unit       val unify_cstr : Fcl_var.BASICFD.t -> Fcl_var.BASICFD.elt -> Fcl_cstr.t     end   module type FD =     sig       type t       type attr       type domain       type elt       type 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) 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 -> Fcl_cstr.t -> unit       val int : elt -> t       val subst : t -> elt -> unit       val unify_cstr : t -> elt -> Fcl_cstr.t       val remove : t -> elt -> unit       val values : t -> elt list       val iter : (elt -> unit) -> t -> unit     end   module Fd :     sig       type t       type attr = Attr.t       type domain = Fcl_domain.t       type elt = Fcl_domain.elt       type event = 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) 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 -> Fcl_cstr.t -> unit       val int : elt -> t       val subst : t -> elt -> unit       val unify_cstr : t -> elt -> Fcl_cstr.t       val remove : t -> elt -> unit       val values : t -> elt list       val iter : (elt -> unit) -> t -> unit     end   module SetFd :     sig       type t       type attr = SetAttr.t       type domain = Fcl_setDomain.t       type elt = Fcl_setDomain.S.t       type event = SetAttr.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) 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 -> Fcl_cstr.t -> unit       val int : elt -> t       val subst : t -> elt -> unit       val unify_cstr : t -> elt -> Fcl_cstr.t     end   type concrete_fd = (Fcl_var.Fd.attr, Fcl_var.Fd.elt) Fcl_var.concrete   val delay :     Fcl_var.Attr.event list ->     Fcl_var.Fd.t -> ?waking_id:int -> Fcl_cstr.t -> unit end