CiaoPP is the abstract interpretation-based preprocessor of the Ciao
multi-paradigm program development environment. 
CiaoPP can perform a number of program debugging,
analysis, and source-to-source transformation tasks on (Ciao) Prolog
programs. These tasks include:

@begin{itemize}

@item @concept{Inference of properties} of the predicates and literals
of the program, including @concept{types}, @concept{modes} and other
@concept{variable instantiation} properties, @concept{non-failure},
@concept{determinacy}, bounds on @concept{computational cost}, bounds on
@concept{sizes of terms} in the program, etc.

@item Certain kinds of @concept{static debugging} and verification,
finding errors before running the program. This includes checking how
programs call system library predicates and also @concept{checking the
assertions} present in the program or in other modules used by the
program. Such assertions represent essentially partial
@concept{specifications} of the program.

@item Several kinds of source to source @concept{program
transformations} such as @concept{program specialization}, slicing,
@concept{partial evaluation} of a program,
@concept{program parallelization} (taking @concept{granularity
control} into account), inclusion of @concept{run-time tests} for assertions 
which cannot be checked completely at compile-time, etc.

@item The abstract model of the program inferred by the analyzers can
be used to certify that untrusted mobile code is safe w.r.t. a given
policy (this implements the @em{abstraction-carrying code} approach to
mobile code safety).

@end{itemize}

The information generated by analysis, program properties to be
verified, descriptions of the system libraries, directives provided to
guide analysis, etc.  are all written in the same @concept{assertion
language}, which is in turn also processed by the Ciao system
documentation generator, @apl{lpdoc}.

CiaoPP is distributed under the @concept{GNU general public
license}.

