# Module `Fix__.Core`

`Fix`

offers support for computing the least solution of a set of monotone equations, as described in the unpublished paper "Lazy Least Fixed Points in ML". In other words, it allows defining a recursive function of type `variable -> property`

, where cyclic dependencies between variables are allowed, and properties must be equipped with a partial order. The function thus obtained performs the fixed point computation on demand, in an incremental manner, and is memoizing.

`Make`

constructs a solver for a type `key`

that is equipped with an implementation of imperative maps and a type `property`

that is equipped with `bottom`

, `equal`

, and `is_maximal`

functions.

`module Make : functor (M : Fix__.Sigs.IMPERATIVE_MAPS) -> functor (P : Fix__.Sigs.PROPERTY) -> Fix__.Sigs.SOLVER with type variable = M.key and type property = P.property`

`ForOrderedType`

is a special case of `Make`

where it suffices to pass an ordered type `T`

as an argument. A reference to a persistent map is used to hold the memoization table.

`module ForOrderedType : functor (T : Fix__.Sigs.OrderedType) -> functor (P : Fix__.Sigs.PROPERTY) -> Fix__.Sigs.SOLVER with type variable = T.t and type property = P.property`

`ForHashedType`

is a special case of `Make`

where it suffices to pass a hashed type `T`

as an argument. A hash table is used to hold the memoization table.

`module ForHashedType : functor (T : Fix__.Sigs.HashedType) -> functor (P : Fix__.Sigs.PROPERTY) -> Fix__.Sigs.SOLVER with type variable = T.t and type property = P.property`

`ForType`

is a special case of `Make`

where it suffices to pass an arbitrary type `T`

as an argument. A hash table is used to hold the memoization table. OCaml's built-in generic equality and hash functions are used.

`module ForType : functor (T : Fix__.Sigs.TYPE) -> functor (P : Fix__.Sigs.PROPERTY) -> Fix__.Sigs.SOLVER with type variable = T.t and type property = P.property`