Introduction
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:
- Inference of properties of the predicates and literals of the program, including Types, modes (Groundness and sharing), Term structure, and other variable instantiation properties, non-failure, determinacy, bounds on computational cost (e.g., Number of resolution steps of the computation), bounds on size of terms in the program, etc (see Available abstract domains).
- Certain kinds of static debugging and verification, finding errors before running the program. This includes checking how programs call system library predicates and also checking the assertions present in the program or in other modules used by the program. Such assertions represent essentially partial specifications of the program.
- Several kinds of source to source program transformations such as program specialization, slicing, partial evaluation of a program, program parallelization (taking granularity control into account), inclusion of run-time tests for assertions which cannot be checked completely at compile-time, etc.
- 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 abstraction-carrying code approach to mobile code safety).
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 assertion language, which is in turn also processed by the Ciao system documentation generator, lpdoc.
CiaoPP is distributed under the GNU general public license.
How to use this manual
This is a reference manual. It also includes a part on the CiaoPP internals. You can use this manual to:
- Look up descriptions for the commands, flags, options, domains, transformations, etc. of CiaoPP. In the html versions of the manual you can use the search facility to this end. In other versions the Predicate/Method Definition Index can help you in locating commands; the Regular Type Definition Index can help in locating the definitions of the types associated to the arguments of commands; the Concept Definition Index may help in locating the part of the manual where a particular feature of CiaoPP is described; and the Global Index includes all of the above plus references to pages where the command, type, or concept is used (not necessarily defined).
- Learn about all the abstract domains currently included with CiaoPP and the properties that they can infer.
- Learn about how to extend CiaoPP, for example by defining new analysis domains.
- Learn about CiaoPP internals.
Since this is a reference manual, to begin using CiaoPP, we suggest you start by following one or more of the companion CiaoPP tutorials that are available in the Ciao system documentation.
This manual assumes in some places some familiarity with the techniques that implement the different functionalities, such as abstract interpretation, partial evaluation, etc. However, references are included to technical papers that explain in detail such techniques.
Note
Since we are often merging new functionality into the CiaoPP distribution from more experimental versions, you may find sometimes that some documented functionality in this manual is not available or not working properly. We will be grateful if you report any missing functionality or bugs you find.