Module Solve


module Solve: sig  end
Solver for Systems of Equations.

This module implements a solver for general systems of equations. The solver uses a simple worklist algorithm to solve the equation system.

The algorith proceeds as follows. The set of variables yet to be evaluated is kept in a worklist. It is initialized with the set X of variables in which we are interested. For every variable x considered so far, we (globally) maintain the current value together with a set infl(x) of certain variables y such that the evaluation of the right-hand side for y may access value s(x).

As long as the worklist is nonempty, the algorithm iteratively extracts some variable x from teh worklist and evaluates the right-hand side f of x on the current partial variable assignment s. If the least upper bound of the old value s(s) and f(s) is different from the old value, the value of s for all y of infl(x), may no longer be valid; therefore, they are added to the worklist. Afterwards, infl(x) is reset to the empty set.


module type Domain = sig  end
Input signature of functor Solve.Make representing the domain of the equations.
module type ItemEq = sig  end
Input signature of functor Solve.Make representing the variables.
module type Solver = sig  end
Output signature of functor Solve.Make.
module Make: functor (Item : ItemEq) -> functor (Domain : Domain) -> sig  end
Functor building an implementation of the Solve structure given a variable set and a domain.