Publications


Abstract
Rewriting and static analyses are mutually beneficial techniques: program transformations change the inten- sional aspects of the program, and can thus improve analysis precision, while some efficient transformations are enabled by specific knowledge of some program invariants. Despite the strong interaction between these techniques, they are usually considered distinct. In this paper, we demonstrate that we can turn abstract interpreters into compilers, using a simple free algebra over the standard signature of abstract domains. Functor domains correspond to compiler passes, for which soundness is translated to a proof of forward simulation, and completeness to backward simulation. We achieve translation to SSA using an abstract do- main with a non-standard SSA signature. Incorporating such an SSA translation to an abstract interpreter improves its precision; in particular we show that an SSA-based non-relational domain is always more precise than a standard non-relational domain for similar time and memory complexity. Moreover, such a domain allows recovering from precision losses that occur when analyzing low-level machine code instead of source code. These results help implement analyses or compilation passes where symbolic and semantic methods simultaneously refine each other, and improves precision when compared to doing the passes in sequence.
Abstract
In this work-in-progress paper, we present labeled union-find,
an extension of the union-find data structure where
edges are annotated with labels that form a group algebraic
structure. This structure allows to very efficiently represent
the transitive closure of many useful binary relations, such as
two-variables per equality (TVPE) constraints of the form
y = ax+b
. We characterize the properties of labeled union-find
when used to represent binary relations between variables.
More specifically, we study the use of this domain in a static
analysis; either to represent binary relations, or as a reduced
product with non-relational abstract domains with constraint
propagation; as well as the design of efficient algorithms for
the join of labeled union-find structures. We believe that this
structure could be used as a low-cost relational domain or
decision procedure, and that it could make other relational
domains more efficient by removing the need to track some
variables.
Teaching
Unpublished works
-
Defining contextual refinement for capability machinesInternship Report M2, supevised by Lars BirkedalMarch 2023AbstractContextual refinement is a useful notion to relate two open programs x and y by saying that for all contexts C, any observable behavior of C[x] is also seen in C[y]. As such it offers a strong relation based only on the operational semantics of closed programs. I present here a definition of contextual refinement for capability machines, a type of CPU which uses special hardware checks to enforce safety constraints on memory accesses. I explain the challenges of porting refinement to low-level programs, show some results obtained by combining refinement with capability safety, and explore how refinement can be proven using a logical binary relation.
-
Developing a multiprécision ALUInternship Report M1, supevised by Carl SegerJuly 2021
-
Secure bootloader developmentInternship Report M1, supevised by Patrice HameauJuly 2020
-
Efficient resolution of linear systems with integer or polynomial coefficients: study and implementation (fr)Internship Report L3, supevised by Romain Lebreton and Pascal GiorgiJuly 2019
-
Efficient resolution of linear systems by series expansion (fr)Research report L3, supervised by Jérémy BerthomieuJune 2019
-
Percolation in a planar graph (fr)TIPE Report MPIJune 2018
-
Error correction codes: Hamming and Reed-SolomonTIPE Report MPSIJune 2017
Other documents
-
My résumé:
-
Preparatory school class notes:MPI - second year2018
-
Preparatory school class notes:MPSi - first year2017