A collecting interpretation of expressions

A collecting interpretation of expressions is an interpretation of a program that allows one to answer questions of the sort: “What are all possible values to which an expression might evaluate during program execution?” Answering such questions in a denotational framework is akin to traditional data flow analysis, and when used in the context of abstract interpretation allows one to infer properties that approximate the run-time behavior of expression evaluation. In this paper collecting interpretations of expressions are developed for three abstract functional languages: (1) a first-order language with call-by-value semantics, (2) a first-order language with call-by-name semantics, and (3) a higher-order language with call-by-name semantics (i.e., the full untyped lambda calculus with constants). It is argued that the method is simple (in particular, no powerdomains are needed), natural (it captures the intuitive operational behavior of a cache), yet more expressive than existing methods (it is the first exact collecting interpretation for either lazy or higher-order programs).

[1]  John Hughes,et al.  Strictness detection in non-flat domains , 1985, Programs as Data Objects.

[2]  Alan Mycroft,et al.  Abstract interpretation and optimising transformations for applicative programs , 1982 .

[3]  Philip Wadler,et al.  Projections for strictness analysis , 1987, FPCA.

[4]  Gary Lindstrom Static evaluation of functional programs , 1986, SIGPLAN '86.

[5]  Chris Hankin,et al.  The theory of strictness analysis for higher order functions , 1985, Programs as Data Objects.

[6]  Nielson Flemming,et al.  Abstract interpretation using domain theory , 1984 .

[7]  Jon Fairbairn,et al.  Code generation techniques for functional languages , 1986, LFP '86.

[8]  Paul Hudak A semantic model of reference counting and its abstraction (detailed summary) , 1986, LFP '86.

[9]  Flemming Nielson,et al.  Abstract interpretation using domain theory , 1984 .

[10]  Alan Mycroft,et al.  The Theory and Practice of Transforming Call-by-need into Call-by-value , 1980, Symposium on Programming.

[11]  N. S. Barnett,et al.  Private communication , 1969 .

[12]  Patrick Cousot,et al.  Systematic design of program analysis frameworks , 1979, POPL.

[13]  Patrick Cousot,et al.  Abstract interpretation: a unified lattice model for static analysis of programs by construction or approximation of fixpoints , 1977, POPL.

[14]  Neil D. Jones,et al.  Data flow analysis of applicative programs using minimal function graphs , 1986, POPL '86.

[15]  Chris Hankin,et al.  Abstract Interpretation of Declarative Languages , 1987 .

[16]  Joseph E. Stoy,et al.  Denotational Semantics: The Scott-Strachey Approach to Programming Language Theory , 1981 .

[17]  David A. Schmidt,et al.  Denotationaisemantics: a methodology for language development , 1986 .

[18]  Neil D. Jones,et al.  Complexity of flow analysis, inductive assertion synthesis and a language due to Dijkstra , 1980, 21st Annual Symposium on Foundations of Computer Science (sfcs 1980).

[19]  Paul Hudak,et al.  Higher-order strictness analysis in untyped lambda calculus , 1986, POPL '86.