sig
module type IMPERATIVE_MAPS =
sig
type key
type 'data t
val create : unit -> 'data Fix.IMPERATIVE_MAPS.t
val clear : 'data Fix.IMPERATIVE_MAPS.t -> unit
val add :
Fix.IMPERATIVE_MAPS.key ->
'data -> 'data Fix.IMPERATIVE_MAPS.t -> unit
val find :
Fix.IMPERATIVE_MAPS.key -> 'data Fix.IMPERATIVE_MAPS.t -> 'data
val iter :
(Fix.IMPERATIVE_MAPS.key -> 'data -> unit) ->
'data Fix.IMPERATIVE_MAPS.t -> unit
end
module type PROPERTY =
sig
type property
val bottom : Fix.PROPERTY.property
val equal : Fix.PROPERTY.property -> Fix.PROPERTY.property -> bool
val is_maximal : Fix.PROPERTY.property -> bool
end
module Make :
functor (M : IMPERATIVE_MAPS) ->
functor (P : PROPERTY) ->
sig
type variable = M.key
type property = P.property
type valuation = Fix.Make.variable -> Fix.Make.property
type rhs = Fix.Make.valuation -> Fix.Make.property
type equations = Fix.Make.variable -> Fix.Make.rhs
val lfp : Fix.Make.equations -> Fix.Make.valuation
end
end