Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints

A program denotes computations in some universe of objects. Abstract interpretation of programs consists in using that denotation to describe computations in another universe of abstract objects, so that the results of abstract execution give some information on the actual computations. An intuitive example (which we borrow from Sintzoff [72]) is the rule of signs. The text -1515 * 17 may be understood to denote computations on the abstract universe {(+), (-), (±)} where the semantics of arithmetic operators is defined by the rule of signs. The abstract execution -1515 * 17 → -(+) * (+) → (-) * (+) → (-), proves that -1515 * 17 is a negative number. Abstract interpretation is concerned by a particular underlying structure of the usual universe of computations (the sign, in our example). It gives a summary of some facets of the actual executions of a program. In general this summary is simple to obtain but inaccurate (e.g. -1515 + 17 → -(+) + (+) → (-) + (+) → (±)). Despite its fundamentally incomplete results abstract interpretation allows the programmer or the compiler to answer questions which do not need full knowledge of program executions or which tolerate an imprecise answer, (e.g. partial correctness proofs of programs ignoring the termination problems, type checking, program optimizations which are not carried in the absence of certainty about their feasibility, …).

[1]  Ben Dushnik,et al.  Partially Ordered Sets , 1941 .

[2]  S. C. Kleene,et al.  Introduction to Metamathematics , 1952 .

[3]  A. Tarski A LATTICE-THEORETICAL FIXPOINT THEOREM AND ITS APPLICATIONS , 1955 .

[4]  Peter Naur,et al.  Checking of operand types in algol compilers , 1965 .

[5]  Dana S. Scott,et al.  The lattice of flow diagrams , 1971, Symposium on Semantics of Algorithmic Languages.

[6]  Michel Sintzoff Calculating properties of programs by valuations on specific models , 1972 .

[7]  Gary A. Kildall,et al.  A unified approach to global program optimization , 1973, POPL.

[8]  Carl Hewitt,et al.  Actor induction and meta-evaluation , 1973, POPL.

[9]  Richard Lee Sites,et al.  Proving that computer programs terminate cleanly. , 1974 .

[10]  Peter Henderson Finite state modelling in program development , 1975 .

[11]  Jacob T. Schwartz,et al.  Automatic data structure choice in a language of very high level , 1975, CACM.

[12]  Ben Wegbreit,et al.  Property extraction in well-founded property sets , 1975, IEEE Transactions on Software Engineering.

[13]  R. Tarjan Solving path problems on directed graphs. , 1975 .

[14]  Zohar Manna,et al.  A new approach to recursive programs. , 1975 .

[15]  Robert E. Tarjan,et al.  Iterative algorithms for global flow analysis , 1976 .

[16]  Ben Wegbreit,et al.  Verifying Program Performance , 1976, JACM.

[17]  Zohar Manna,et al.  Logical analysis of programs , 1976, CACM.

[18]  Michel Sintzoff,et al.  Eliminating Blind Alleys from Backtrack Programs , 1976, ICALP.

[19]  Radhia Cousot,et al.  Static determination of dynamic properties of generalized type unions , 1977, Language Design for Reliable Software.