module Int_set:sig
..end
Above a certain limit fixed by set_small_cardinal
, these sets must be
converted into intervals. The functions that make the set grow returns a
set_or_top
type : either the resulting sets is small enough, or it is
converted into an interval.
Sets are always non-empty. The functions reducing the sets returns a
set or_bottom
type: either the result is non-empty, or it is `Bottom.
val get_small_cardinal : unit -> int
val set_small_cardinal : int -> unit
include Datatype.S_with_collections
val inject_singleton : Integer.t -> t
val inject_periodic : from:Integer.t -> period:Integer.t -> number:Integer.t -> t
from + k*period
for k
in number
integers. There is no verification
about number
, but it should be stritly positive.val inject_list : Integer.t list -> t
val to_list : t -> Integer.t list
val remove : t -> Integer.t -> t Bottom.Type.or_bottom
val mem : Integer.t -> t -> bool
mem i s
is true iff the set s
contains the integer i
.val one : t
val zero : t
val minus_one : t
val zero_or_one : t
val min : t -> Integer.t
val max : t -> Integer.t
val cardinal : t -> int
val for_all : (Integer.t -> bool) -> t -> bool
val exists : (Integer.t -> bool) -> t -> bool
val iter : (Integer.t -> unit) -> t -> unit
val fold : ?increasing:bool -> (Integer.t -> 'a -> 'a) -> t -> 'a -> 'a
val map : (Integer.t -> Integer.t) -> t -> t
val filter : (Integer.t -> bool) -> t -> t Bottom.Type.or_bottom
val map_reduce : (Integer.t -> 'a) -> ('a -> 'a -> 'a) -> t -> 'a
typeset_or_top =
[ `Set of t | `Top of Integer.t * Integer.t * Integer.t ]
typeset_or_top_or_bottom =
[ `Bottom | `Set of t | `Top of Integer.t * Integer.t * Integer.t ]
val is_included : t -> t -> bool
val join : t -> t -> set_or_top
val link : t -> t -> set_or_top
val meet : t -> t -> t Bottom.Type.or_bottom
val narrow : t -> t -> t Bottom.Type.or_bottom
val intersects : t -> t -> bool
val diff_if_one : t -> t -> t Bottom.Type.or_bottom
val complement_under : min:Integer.t -> max:Integer.t -> t -> set_or_top_or_bottom
Int_val
for more details.val add_singleton : Integer.t -> t -> t
val add : t -> t -> set_or_top
val add_under : t -> t -> set_or_top
val neg : t -> t
val mul : t -> t -> set_or_top
val c_rem : t -> t -> set_or_top_or_bottom
val scale : Integer.t -> t -> t
val scale_div : pos:bool -> Integer.t -> t -> t
val scale_rem : pos:bool -> Integer.t -> t -> t
val bitwise_signed_not : t -> t
val subdivide : t -> t * t