sig   module type Join_Semi_Lattice =     sig       type t       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool     end   module type Bounded_Join_Semi_Lattice =     sig       type t       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t     end   module type With_Top = sig type t val top : Lattice_type.With_Top.t end   module type With_Top_Opt =     sig type t val top_opt : Lattice_type.With_Top_Opt.t option end   module type With_Error_Top = sig exception Error_Top end   module type With_Error_Bottom = sig exception Error_Bottom end   module type With_Errors =     sig exception Error_Top exception Error_Bottom end   module type With_Narrow =     sig       type t       val narrow :         Lattice_type.With_Narrow.t ->         Lattice_type.With_Narrow.t -> Lattice_type.With_Narrow.t     end   module type With_Under_Approximation =     sig       type t       val link :         Lattice_type.With_Under_Approximation.t ->         Lattice_type.With_Under_Approximation.t ->         Lattice_type.With_Under_Approximation.t       val meet :         Lattice_type.With_Under_Approximation.t ->         Lattice_type.With_Under_Approximation.t ->         Lattice_type.With_Under_Approximation.t     end   module type With_Intersects =     sig       type t       val intersects :         Lattice_type.With_Intersects.t ->         Lattice_type.With_Intersects.t -> bool     end   module type With_Enumeration =     sig       type t       val fold_enum :         (Lattice_type.With_Enumeration.t -> '-> 'a) ->         Lattice_type.With_Enumeration.t -> '-> 'a       val cardinal_less_than : Lattice_type.With_Enumeration.t -> int -> int     end   module type With_Diff =     sig       type t       val diff :         Lattice_type.With_Diff.t ->         Lattice_type.With_Diff.t -> Lattice_type.With_Diff.t     end   module type With_Diff_One =     sig       type t       val diff_if_one :         Lattice_type.With_Diff_One.t ->         Lattice_type.With_Diff_One.t -> Lattice_type.With_Diff_One.t     end   module type With_Cardinal_One =     sig       type t       val cardinal_zero_or_one : Lattice_type.With_Cardinal_One.t -> bool     end   module type With_Widening =     sig       type t       type widen_hint       val widen :         Lattice_type.With_Widening.widen_hint ->         Lattice_type.With_Widening.t ->         Lattice_type.With_Widening.t -> Lattice_type.With_Widening.t     end   module type AI_Lattice_with_cardinal_one =     sig       type t       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool     end   module type Full_Lattice =     sig       type t       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val diff : t -> t -> t     end   module type Full_AI_Lattice_with_cardinality =     sig       type t       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val diff : t -> t -> t       val diff_if_one : t -> t -> t       val fold_enum : (t -> '-> 'a) -> t -> '-> 'a       val cardinal_less_than : t -> int -> int       exception Error_Top     end   module type Lattice_Value = Datatype.S_with_collections   module type Lattice_Product =     sig       type t1       type t2       type t = private           Product of Lattice_type.Lattice_Product.t1 *             Lattice_type.Lattice_Product.t2         | Bottom       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val inject :         Lattice_type.Lattice_Product.t1 ->         Lattice_type.Lattice_Product.t2 -> Lattice_type.Lattice_Product.t       val fst :         Lattice_type.Lattice_Product.t -> Lattice_type.Lattice_Product.t1       val snd :         Lattice_type.Lattice_Product.t -> Lattice_type.Lattice_Product.t2     end   module type Lattice_UProduct =     sig       type t1       type t2       type t =           Lattice_type.Lattice_UProduct.t1 * Lattice_type.Lattice_UProduct.t2       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool     end   module type Lattice_Sum =     sig       type t1       type t2       type sum = private           Top         | Bottom         | T1 of Lattice_type.Lattice_Sum.t1         | T2 of Lattice_type.Lattice_Sum.t2       type t = sum       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val inject_t1 : Lattice_type.Lattice_Sum.t1 -> t       val inject_t2 : Lattice_type.Lattice_Sum.t2 -> t     end   module type Lattice_Base =     sig       type l       type t = private Top | Bottom | Value of Lattice_type.Lattice_Base.l       exception Error_Top       exception Error_Bottom       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val project :         Lattice_type.Lattice_Base.t -> Lattice_type.Lattice_Base.l       val inject : Lattice_type.Lattice_Base.l -> Lattice_type.Lattice_Base.t       val transform :         (Lattice_type.Lattice_Base.l ->          Lattice_type.Lattice_Base.l -> Lattice_type.Lattice_Base.l) ->         Lattice_type.Lattice_Base.t ->         Lattice_type.Lattice_Base.t -> Lattice_type.Lattice_Base.t     end   module type Lattice_Set_Generic =     sig       module O : sig type t type elt end       exception Error_Top       type t = private Set of Lattice_type.Lattice_Set_Generic.O.t | Top       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint = O.t       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val inject_singleton :         Lattice_type.Lattice_Set_Generic.O.elt ->         Lattice_type.Lattice_Set_Generic.t       val inject :         Lattice_type.Lattice_Set_Generic.O.t ->         Lattice_type.Lattice_Set_Generic.t       val empty : Lattice_type.Lattice_Set_Generic.t       val apply2 :         (Lattice_type.Lattice_Set_Generic.O.elt ->          Lattice_type.Lattice_Set_Generic.O.elt ->          Lattice_type.Lattice_Set_Generic.O.elt) ->         Lattice_type.Lattice_Set_Generic.t ->         Lattice_type.Lattice_Set_Generic.t ->         Lattice_type.Lattice_Set_Generic.t       val apply1 :         (Lattice_type.Lattice_Set_Generic.O.elt ->          Lattice_type.Lattice_Set_Generic.O.elt) ->         Lattice_type.Lattice_Set_Generic.t ->         Lattice_type.Lattice_Set_Generic.t       val fold :         (Lattice_type.Lattice_Set_Generic.O.elt -> '-> 'a) ->         Lattice_type.Lattice_Set_Generic.t -> '-> 'a       val iter :         (Lattice_type.Lattice_Set_Generic.O.elt -> unit) ->         Lattice_type.Lattice_Set_Generic.t -> unit       val exists :         (Lattice_type.Lattice_Set_Generic.O.elt -> bool) ->         Lattice_type.Lattice_Set_Generic.t -> bool       val for_all :         (Lattice_type.Lattice_Set_Generic.O.elt -> bool) ->         Lattice_type.Lattice_Set_Generic.t -> bool       val project :         Lattice_type.Lattice_Set_Generic.t ->         Lattice_type.Lattice_Set_Generic.O.t       val mem :         Lattice_type.Lattice_Set_Generic.O.elt ->         Lattice_type.Lattice_Set_Generic.t -> bool     end   module type Lattice_Set =     sig       module O : Datatype.Set       exception Error_Top       type t = private Set of O.t | Top       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint = O.t       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val inject_singleton : O.elt -> t       val inject : O.t -> t       val empty : t       val apply2 : (O.elt -> O.elt -> O.elt) -> t -> t -> t       val apply1 : (O.elt -> O.elt) -> t -> t       val fold : (O.elt -> '-> 'a) -> t -> '-> 'a       val iter : (O.elt -> unit) -> t -> unit       val exists : (O.elt -> bool) -> t -> bool       val for_all : (O.elt -> bool) -> t -> bool       val project : t -> O.t       val mem : O.elt -> t -> bool     end   module type Lattice_Hashconsed_Set =     sig       module O :         sig           type elt           type t           val empty : t           val is_empty : t -> bool           val mem : elt -> t -> bool           val add : elt -> t -> t           val singleton : elt -> t           val remove : elt -> t -> t           val union : t -> t -> t           val inter : t -> t -> t           val diff : t -> t -> t           val subset : t -> t -> bool           val iter : (elt -> unit) -> t -> unit           val fold : (elt -> '-> 'a) -> t -> '-> 'a           val for_all : (elt -> bool) -> t -> bool           val exists : (elt -> bool) -> t -> bool           val filter : (elt -> bool) -> t -> t           val partition : (elt -> bool) -> t -> t * t           val cardinal : t -> int           val elements : t -> elt list           val choose : t -> elt           val split : elt -> t -> t * bool * t           val find : elt -> t -> elt           val of_list : elt list -> t           val ty : t Type.t           val name : string           val descr : t Descr.t           val packed_descr : Structural_descr.pack           val reprs : t list           val equal : t -> t -> bool           val compare : t -> t -> int           val hash : t -> int           val pretty_code : Format.formatter -> t -> unit           val internal_pretty_code :             Type.precedence -> Format.formatter -> t -> unit           val pretty : Format.formatter -> t -> unit           val varname : t -> string           val mem_project : (Project_skeleton.t -> bool) -> t -> bool           val copy : t -> t         end       exception Error_Top       type t = private Set of O.t | Top       val ty : t Type.t       val name : string       val descr : t Descr.t       val packed_descr : Structural_descr.pack       val reprs : t list       val equal : t -> t -> bool       val compare : t -> t -> int       val hash : t -> int       val pretty_code : Format.formatter -> t -> unit       val internal_pretty_code :         Type.precedence -> Format.formatter -> t -> unit       val pretty : Format.formatter -> t -> unit       val varname : t -> string       val mem_project : (Project_skeleton.t -> bool) -> t -> bool       val copy : t -> t       val join : t -> t -> t       val is_included : t -> t -> bool       val join_and_is_included : t -> t -> t * bool       val bottom : t       val top : t       type widen_hint = O.t       val widen : widen_hint -> t -> t -> t       val cardinal_zero_or_one : t -> bool       val narrow : t -> t -> t       val link : t -> t -> t       val meet : t -> t -> t       val intersects : t -> t -> bool       val inject_singleton : O.elt -> t       val inject : O.t -> t       val empty : t       val apply2 : (O.elt -> O.elt -> O.elt) -> t -> t -> t       val apply1 : (O.elt -> O.elt) -> t -> t       val fold : (O.elt -> '-> 'a) -> t -> '-> 'a       val iter : (O.elt -> unit) -> t -> unit       val exists : (O.elt -> bool) -> t -> bool       val for_all : (O.elt -> bool) -> t -> bool       val project : t -> O.t       val mem : O.elt -> t -> bool     end end