package fix
Install
Dune Dependency
Authors
Maintainers
Sources
md5=d3d316080a2fc9a4f56c15040e141364
sha512=850cf0d3c6db806ac1d0b9bf39ad82529aecd56af07b2b421f48af15afdeab493f7b73e5d9e7d492e56717a8aeeb61466d87ac8a51fac30e3f77028b5ecd57c4
Description
Published: 25 Nov 2021
README
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:
CompactQueue
offers a minimalist mutable FIFO queue that is tuned for performance.DataFlow
performs a forward data flow analysis over a directed graph. LikeFix
, it computes the least function of typevariable -> property
that satisfies a fixed point equation. It is less widely applicable thanFix
, but, when it is applicable, it is easier to use and more efficient thanFix
.DataFlow.ForCustomMaps
is particularly tuned for performance.Gensym
offers a simple facility for generating fresh integer identifiers.Indexing
offers a safe API for manipulating indices into fixed-size arrays.Memoize
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
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.Numbering
offers a facility for assigning a unique number to each value in a certain finite set and translating (both ways) between values and their numbers.GraphNumbering
offers a facility for discovering and numbering the reachable vertices in a finite directed graph.HashCons
offers support for setting up a hash-consed data type, that is, a data type whose values carry unique integer identifiers.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 typevariable -> 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.Prop
defines a few common partial orders, includingProp.Boolean
,Prop.Option
,Prop.Set
.Glue
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.
The documentation is built by make doc
and is then found in the file _build/default/_doc/_html/index.html
.
The documentation of the latest released version is also available online.
Demos
A few demos are provided:
brz
sets up a hash-consed representation of regular expressions and shows how to convert a regular expression to a deterministic finite-state automaton by Brzozowski's method. This demo exploits almost all of the submodules listed above, and is accompanied with a commentary.cyk
presents a CYK-style parsing algorithm as an instance ofFix
.cfg
usesFix
to perform certain static analyses of a context-free grammar; this includes computing nullability information and FIRST sets.fib
defines Fibonacci's function in several different ways using the fixed-point combinators offered byMemoize
andFix
.hco
sets up simple-minded hash-consed trees usingHashCons
.
Dev Dependencies
None
Used by (11)
-
feat
< "20211224"
- feat-core
- karamel
-
kremlin
< "transition"
- mezzo
-
ocamlformat
>= "0.14.0" & < "0.25.1"
- ocamlformat-lib
- ocamlformat-mlx-lib
-
ocamlformat-rpc
< "0.21.0"
-
reason
>= "3.6.0"
- refl
Conflicts
None