Publication:
Towards computing distances among abstract interpretations

Research Projects
Organizational Units
Journal Issue
Abstract
Abstract interpretation is a technique which safely approximates the execution of programs. These aproximations can then be used by static analysis tools to reason about properties that hold for all possible executions, in order to optimize, verify or debug programs, among other applications. Different abstractions, called abstract domains, and analysis algorithms, computing the fixpoints involved in different ways, are used in this process, resulting in different aproximations, all of which are correct but may have different precision. This use of abstract interpretations is purely qualitative: it relies on an order ⊑ in the abstract domains and the fact that one abstract interpretation over-aproximates or underaproximates the actual (or some given) semantics of programs. A quantitative use of abstract interpretations is not covered by the existing theory, that is, there is no way to measure how close two abstract interpretations are to each other, even when one overaproximates the other. However, the structure of abstract domains and (logic) programs suggests that one could define distances and metrics among those abstract domains and abstract interpretations, and those distances could arguably find many applications, such as comparing the precision of different analyses. In this work we develop theory and tools to work with abstract interpretations quantitatively, in the context of the Ciao and CiaoPP environment. First, we develop a theory for distances in abstract domains and propose distances for CiaoPP domains. Later, we extend those distances to distances between whole analyses of programs. Finally, we apply successfully those distances in experiments to measure the precision of different analyses.
La interpretación abstracta es una técnica que permite aproximar correctamente la semántica de los programas. Para ello se usan distintas abstracciones, llamadas dominios abstractos, y algoritmos de análisis, lo cual da lugar a aproximaciones correctas con distinta precisión. Esas aproximaciones son después usadas por herramientas de análisis estático para razonar acerca de las propiedades que se cumplen para todas las posibles ejecuciones del programa, y así poder optimizar, verificar o depurar los programas, entre otras aplicaciones. Este uso de la técnica de interpretación abstracta es totalmente cualitativo: se basa en una relación de orden en los dominios abstractos y en el hecho de que una interpretación abstracta sobreaproxime la semántica real (o una dada) del programa en cuestión. La teoría actual no contempla un uso cuantitativo de las interpretaciones abstractas, es decir, no permite medir como de parecidas son dos interpretaciones abstractas. Sin embargo, la estructura de los dominios abstractos y de los programas sugiere que se podrían definir distancias en esos dominios y entre interpretaciones abstractas, las cuales se podrían usar para medir la precisión de distintos análisis, entre otras aplicaciones. En este trabajo proponemos teoría y herramientas para trabajar cuantitativamente con la técnica de interpretación abstracta, en el contexto del lenguaje de programación Ciao y su preprocesador CiaoPP. En primer lugar se desarrollan bases teóricas para definir distancias en dominios abstractos y se proponen algunas distancias para los dominios usados en CiaoPP. Después se extienden esas distancias en dominios a distancias entre interpretaciones abstractas completas de los programas. Finalmente, se aplican esas distancias en experimentos para medir la precisión de distintos análisis.
Description
Universidad Complutense, Facultad de Informática. Departamento de Sistemas Informáticos y Computación, curso 2017/2018
Unesco subjects
Keywords
Citation