Commit 3ed7d777 authored by POTTIER Francois's avatar POTTIER Francois
Browse files


parent 16942dd3
# Fix: memoization and fixed points made easy
`fix` is an OCaml library that helps with various constructions
that involve memoization and recursion.
## Installation
Type `opam install fix`.
## Overview
At the top of an OCaml module, declare `open Fix`.
This gives you access to the following submodules:
* [`Gensym`](src/Gensym.mli) offers a simple facility
for **generating fresh integer identifiers**.
* [`Memoize`](src/Memoize.mli) offers a number of combinators
that help **construct possibly recursive memoizing functions**, that
is, functions that lazily record their input/output graph,
so as to avoid repeated computation.
* [`Tabulate`](src/Tabulate.mli) offers facilities
for **tabulating a function**, that is, eagerly evaluating this function
at every point in its domain, so as to obtain an equivalent
function that can be queried in constant time.
* [`Number`](src/Number.mli) offers a facility for
**discovering and numbering the reachable vertices** in a directed graph.
* [`HashCons`](src/HashCons.mli) offers support for
**setting up a hash-consed data type**, that is, a data type whose
values carry unique integer identifiers.
* [`Fix`](src/Core.mli) 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.
* `Prop` defines a few common partial orders, including
* [`Glue`](src/Glue.mli) contains glue code that helps
build various implementations of association maps.
The signatures that appear in the above files,
such as `MEMOIZER`, `TABULATOR`, `SOLVER`, and so on,
are defined [here](src/
<!-- demos -->
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment