module type JOIN_SEMILATTICE =sig..end
type t
val join : t ->
t -> tval bottom : tval is_included : t -> t -> boolval join_and_is_included : t ->
t -> t * bool
Instead of defining it directly, it can be defined from join and
equal, or from is_included, for instance by
if is_included new old then (true,old) else (false, join old new) or
let j = join old new in (equal j new, j).
val pretty : Format.formatter -> t -> unit