Program Analysis Interest Group
   

Next: Open Problem: Error Quantification Up: Background Previous: Background

Abstract Interpretation

Abstract Interpretation is a theory for formally constructing conservative approximations of the semantics of programming languages. In practice, it is used for constructing semantics-based analysis algorithms for the automatic, static and conservative determination of dynamic properties of infinite-state programs. Such properties of the run-time behaviour of programs are useful for debugging (e.g. type inference), code optimisation (e.g. run time tests elimination), program transformation (e.g. partial evaluation, parallelisation), and even program correctness proofs (e.g. termination proof) [15].

According to the classical framework [16, 14, 18], an abstract interpretation is defined as a non-standard (approximated) program semantics obtained from the standard (or concrete) one by replacing the actual (concrete) domain of computation and its basic (concrete) semantic operations with, respectively, an abstract domain and corresponding abstract semantic operations.

The idea of non-standard semantics for analysis purposes dates back to [55], where it was called pseudo-evaluation. Similar ideas were developed in [58] and [63]. This approach, under the name ``data flow analysis'', was used later on for compiler optimisation [33, 54]. A general framework for abstract interpretation was developed in a series of papers by Cousot starting with [16]. Recently, the area of abstract interpretation in logic and constraint based programming languages is very active [29, 8]. For a more detailed overview see for example [40].


Next: Open Problem: Error Quantification Up: Background Previous: Background