val choose : t -> elt
val hash : t -> int
val equal : t -> t -> bool
- val uid : t -> int
+ val uid : t -> Uid.t
val positive : t -> set
val negative : t -> set
val inj_positive : set -> t
type node = Finite of E.t | CoFinite of E.t
type set = E.t
module Node = Hcons.Make(struct
- type t = node
- let equal a b =
- match a,b with
- (Finite(s1),Finite(s2))
- | (CoFinite(s1),CoFinite(s2)) -> E.equal s1 s2
- | _ -> false
- let hash = function
- Finite (s) -> HASHINT2(PRIME2,E.hash s)
- | CoFinite(s) -> HASHINT2(PRIME7,E.hash s)
+ type t = node
+ let equal a b =
+ match a,b with
+ (Finite(s1),Finite(s2))
+ | (CoFinite(s1),CoFinite(s2)) -> E.equal s1 s2
+ | _ -> false
+ let hash = function
+ Finite (s) -> (E.hash s) lsl 1
+ | CoFinite(s) -> ((E.hash s) lsl 1 ) lor 1
end)
type t = Node.t
let empty = Node.make (Finite E.empty)
| CoFinite s -> not (E.mem x s)
let singleton x = finite (E.singleton x)
+
let add e t = match t.Node.node with
| Finite s -> finite (E.add e s)
| CoFinite s -> cofinite (E.remove e s)
+
let remove e t = match t.Node.node with
| Finite s -> finite (E.remove e s)
| CoFinite s -> cofinite (E.add e s)