## Section: New Results

### Control-Flow Analysis by Abstract Interpretation

Control-flow analysis (CFA) of functional programs is concerned with determining how the program's functions call each other. In the case of the lambda calculus, this amounts to computing the flow of lambda expressions in order to determine what functions are effectively called in an application $\left({e}_{1}\phantom{\rule{3.33333pt}{0ex}}{e}_{2}\right)$. This work shows that it is possible to use abstract interpretation techniques to derive systematically a control-flow analysis for a simple higher-order functional language. The analysis approximates the interprocedural control-flow of both function calls and returns in the presence of first-class functions and tail-call optimization. A number of advantages follow from taking this approach:

• The systematic derivation of a CFA for a higher-order functional language from a well-known operational semantics provides the resulting analysis with strong mathematical foundations. Its correctness follows directly from the general theorems of abstract interpretation.

• The approach is easily adapted to different variants of the source language. We demonstrate this by deriving a CFA for functional programs written in continuation-passing style.

• The common framework of these analyses enables their comparison. We take advantage of this to settle a question about the equivalence between the analysis of programs in direct and continuation-passing style.

• The resulting equations can be given an equivalent constraint-based presentation, providing ipso facto a rational reconstruction and a correctness proof of constraint-based CFA.

This work was presented at the Japanese Shonan workshop on Verification of higher-order functional programs in September 2011. A journal article is accepted to appear in Information and Computation.