(* module Ptset = struct include Set.Make (struct type t = int let compare = (-) end) let hash = Hashtbl.hash end *) module M : FiniteCofinite.S with type elt = Tag.t and type set = Ptset.Int.t = FiniteCofinite.Make(Ptset.Int) include M let tag t = singleton t let pcdata = singleton Tag.pcdata let attribute = singleton Tag.attribute let star = diff any (add Tag.attribute_data (cup pcdata attribute)) let node = neg attribute let print ppf t = let print_set s = Format.fprintf ppf "{"; Ptset.Int.iter (fun t -> Format.fprintf ppf "'%s' " (Tag.to_string t)) s; Format.fprintf ppf "}" in if is_finite t then if is_empty t then Format.fprintf ppf "∅" else print_set (positive t) else begin Format.fprintf ppf "Σ"; if not (is_any t) then (Format.fprintf ppf "\\" ; print_set (negative t)) end