(* This signature defines the operations that an upper semi-lattice should provide. It is used by Kildall's algorithm. *) module type S = sig (* This is the type of the lattice elements. *) type t (* This is the least element of the lattice. *) val bottom: t (* This is the lattice join operation. The lattice ordering must have bounded height for Kildall's algorithm to terminate. *) val join: t -> t -> t (* This is the lattice equality. *) val equal: t -> t -> bool end