.. _spkg_ppl:

ppl: Parma Polyhedra Library
============================

Description
-----------

The Parma Polyhedra Library (PPL) provides numerical abstractions
especially targeted at applications in the field of analysis and
verification of complex systems. These abstractions include convex
polyhedra, defined as the intersection of a finite number of (open or
closed) halfspaces, each described by a linear inequality (strict or
non-strict) with rational coefficients; some special classes of
polyhedra shapes that offer interesting complexity/precision tradeoffs;
and grids which represent regularly spaced points that satisfy a set of
linear congruence relations. The library also supports finite powersets
and products of (any kind of) polyhedra and grids, a mixed integer
linear programming problem solver using an exact-arithmetic version of
the simplex algorithm, a parametric integer programming solver, and
primitives for the termination analysis via the automatic synthesis of
linear ranking functions.

It is written in C++, but comes with interfaces to C, Java, OCaml, and
Prolog. PPL is one of the fastest implementations of polyhedral
computations.

Benchmarks are included in this paper: :arxiv:`cs/0612085`

License
-------

GPL v3+


Upstream Contact
----------------

- https://www.bugseng.com/ppl

Core Development Team

- Roberto Bagnara (University of Parma)
- Patricia M. Hill (University of Parma)
- Enea Zaffanella (University of Parma)


Type
----

standard


Dependencies
------------

- $(MP_LIBRARY)
- :ref:`spkg_glpk`

Version Information
-------------------

package-version.txt::

    1.2.p1

See https://repology.org/project/ppl/versions

Installation commands
---------------------

.. tab:: Sage distribution:

   .. CODE-BLOCK:: bash

       $ sage -i ppl

.. tab:: Arch Linux:

   .. CODE-BLOCK:: bash

       $ sudo pacman -S ppl

.. tab:: conda-forge:

   .. CODE-BLOCK:: bash

       $ conda install ppl

.. tab:: Debian/Ubuntu:

   .. CODE-BLOCK:: bash

       $ sudo apt-get install libppl-dev ppl-dev

.. tab:: Fedora/Redhat/CentOS:

   .. CODE-BLOCK:: bash

       $ sudo dnf install ppl ppl-devel

.. tab:: FreeBSD:

   .. CODE-BLOCK:: bash

       $ sudo pkg install devel/ppl

.. tab:: Gentoo Linux:

   .. CODE-BLOCK:: bash

       $ sudo emerge dev-libs/ppl

.. tab:: Homebrew:

   .. CODE-BLOCK:: bash

       $ brew install ppl

.. tab:: MacPorts:

   .. CODE-BLOCK:: bash

       $ sudo port install ppl

.. tab:: mingw-w64:

   .. CODE-BLOCK:: bash

       $ sudo pacman -S ${MINGW_PACKAGE_PREFIX}-ppl

.. tab:: Nixpkgs:

   .. CODE-BLOCK:: bash

       $ nix-env -f \'\<nixpkgs\>\' --install --attr ppl

.. tab:: openSUSE:

   .. CODE-BLOCK:: bash

       $ sudo zypper install ppl-devel

.. tab:: Void Linux:

   .. CODE-BLOCK:: bash

       $ sudo xbps-install ppl-devel


If the system package is installed, ``./configure`` will check if it can be used.
