The **GENEPI** library gathers a set of routines that can be used in place of Presburger solver. GENEPI is not a real solver but rather an abstraction layer of a solver. The decision procedures are not implemented into the GENEPI library; the necessary functions are imported from dynamically loaded plugins. Each plugin must furnish a set of functions specified by the plugin API.

GENEPI is useful at both sides of the programming interface:

- On one side, applications that require the resolution of Presburger formulas can take advantage of the abstraction that allows to use dynamically loaded solvers and thus, to postpone the choice of the actually used solver at run-time.
- On the other side, solver developers can use any GENEPI-based application to benchmark their solver and compare it to other solvers.

## Documentation

The API documentation is available here.

## Plugins

Several implementations of the GENEPI Plugin API have been developed. Each one is a simple encapsulation of an existing solver library.

**Plugins over natural numbers**- The automaton data-structure (DFA library) of MONA is used to encode binary automata.
- The Shared Automata data-structure is used to implement the plugin PresTAF.

**Plugins over integers**

**Plugins over real numbers**- The PPL (Parma Polyhedra Library) plugin is another plugin not based on the automaton representation.

**Plugins mixing real and integer variables**