Jump to content

Abstract interpretation: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
static analysis pointer
link to model-checking
Line 28: Line 28:
== Related terms ==
== Related terms ==
* [[Standard interpretation]]
* [[Standard interpretation]]
* [[model-checking]]


''This article (or an earlier version of it) contains material from [[FOLDOC]], used with [[Public Domain Resources/Foldoc license|permission]]. Modify if needed.''
''This article (or an earlier version of it) contains material from [[FOLDOC]], used with [[Public Domain Resources/Foldoc license|permission]]. Modify if needed.''

Revision as of 17:21, 18 September 2003

Abstract interpretation is a partial execution of a computer program which gains information about its semantics (e.g. control structure, flow of information) without performing all the calculations. Abstract interpretation is typically used by compilers to analyse programs in order to decide whether certain optimisations or transformations are applicable.

Abstract Interpretation was formalized by Patrick Cousot.

The objects manipulated by the program (typically values and functions) are represented by points in some domain. Each abstract domain point represents some set of real ("concrete") values.

For example, we may take the abstract points "+", "0" and "-" to represent positive, zero and negative numbers and then define an abstract version of the multiplication operator, *#, which operates on abstract values:

*# | + 0 -
---|------
+  | + 0 -
0  | 0 0 0
-  | - 0 +

An interpretation is "safe" if the result of the abstract operation is a safe approximation to the abstraction of the concrete result. The meaning of "a safe approximation" depends on how we are using the results of the analysis.

If, in our example, we assume that smaller values are safer then the "safety condition" for our interpretation (#) is

a# *# b# <= (a * b)#


where a# is the abstract version of a etc.

Often, an interpretation is characterised by the domains used to represent the basic types and the abstract values it assigns to constants (where the constants of a language include primitive functions such as *). The interpretation of constructed types (such as user defined functions, sum types and product types) and expressions can be derived systematically from these basic domains and values.

A common use of abstract interpretation is static analysis.

This article (or an earlier version of it) contains material from FOLDOC, used with permission. Modify if needed.