David Monniaux

dblp:m/DavidMonniaux · DBLP profile ↗
← Back
62ranked-venue papers
37as first author
15since 2021 · last 2026
0000-0001-7671-6126ORCID · verified

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 49 · 27 first-author · 11 since 2021Theory of computation · 15 · 10 first-author · 6 since 2021Artificial intelligence and machine learning · 2 · 1 first-authorSystems, architecture and hardware · 2 · 1 first-author · 2 since 2021Applied, interdisciplinary, general and emerging computing · 2 · 2 first-authorSecurity and privacy · 1 · 1 first-author
YearPublicationVenuePosition
2026 Max-Policy Iteration, Revisited
David Monniaux, Helmut Seidl
ESOP (2)1
2025 Formally Verified Hardening of C Programs against Hardware Fault Injection
abstract
A fault attack is a malicious manipulation of the hardware (e.g., electromagnetic or laser pulse) that modifies the behavior of the software. Fault attacks typically target sensitive applications such as cryptography services, authentication, boot-loaders or firmware updaters. They can be defended against by adding countermeasures, that is, control flow checks and redundancies, either in the hardware, or in the software running on it. In particular, software countermeasures may be added automatically during compilation. In this paper, we describe a formally verified implementation of this approach in the CompCert verified compiler for the C language. We implemented two existing countermeasures protecting the control flow of the program as program transformations over a middle-end intermediate representation of CompCert, RTL. We proved that these countermeasures are correct, that is, they do not change the observable behavior of the program during an execution without fault injection. We then modeled the effect of a fault on the behavior of the program as an extension of the semantic model of RTL. We used this new model to formally prove the efficacy of the countermeasure: all attacks are either caught, or produce no observable effects. In addition to this formal reasoning, we evaluated the protected program using Lazart, a tool for symbolic fault injection, and measured the effect of optimizations on security and performance.
Basile Pesin, Sylvain Boulmé, David Monniaux, Marie-Laure Potet
CPP3
2024 Memory Simulations, Security and Optimization in a Verified Compiler
abstract
Current compilers implement security features and optimizations that require nontrivial semantic reasoning about pointers and memory allocation: the program after the insertion of the security feature, or after applying the optimization, must simulate the original program despite a different memory layout.
David Monniaux
CPP1
2024 Pragmatics of formally verified yet efficient static analysis, in particular, for formally verified compilers
David Monniaux
Int. J. Softw. Tools Technol. Transf.1
2023 Testing a Formally Verified Compiler
abstract
We report on how we combine tests and formal proofs while developing extensions to the CompCert formally verified compiler.
David Monniaux, Léo Gourdin, Sylvain Boulmé, Olivier Lebeltel
TAP1
2023 Formally Verifying Optimizations with Block Simulations
abstract
CompCert (ACM Software System Award 2021) is the first industrial-strength compiler with a mechanically checked proof of correctness. Yet, CompCert remains a moderately optimizing C compiler. Indeed, some optimizations of “gcc ‍-O1” such as Lazy Code Motion (LCM) or Strength Reduction (SR) were still missing: developing these efficient optimizations together with their formal proofs remained a challenge. Cyril Six et al. have developed efficient formally verified translation validators for certifying the results of superblock schedulers and peephole optimizations. We revisit and generalize their approach into a framework (integrated into CompCert) able to validate many more optimizations: an enhanced superblock scheduler, but also Dead Code Elimination (DCE), Constant Propagation (CP), and more noticeably, LCM and SR. In contrast to other approaches to translation validation, we co-design our untrusted optimizations and their validators. Our optimizations provide hints, in the forms of invariants or CFG morphisms , that help keep the formally verified validators both simple and efficient. Such designs seem applicable beyond CompCert.
Léo Gourdin, Benjamin Bonneau, Sylvain Boulmé, David Monniaux, Alexandre Berard
Proc. ACM Program. Lang.4
2023 Formally Verified Loop-Invariant Code Motion and Assorted Optimizations
abstract
We present an approach for implementing a formally certified loop-invariant code motion optimization by composing an unrolling pass and a formally certified yet efficient global subexpression elimination. This approach is lightweight: each pass comes with a simple and independent proof of correctness. Experiments show the approach significantly narrows the performance gap between the CompCert certified compiler and state-of-the-art optimizing compilers. Our static analysis employs an efficient yet verified hashed set structure, resulting in the fast compilation.
David Monniaux, Cyril Six
ACM Trans. Embed. Comput. Syst.1
2022 Formally verified 32- and 64-bit integer division using double-precision floating-point arithmetic
abstract
Some recent processors are not equipped with an integer division unit. Compilers then implement division by a call to a special function supplied by the processor designers, which implements division by a loop producing one bit of quotient per iteration. This hinders compiler optimizations and results in non-constant time computation, which is a problem in some applications. We advocate instead using the processor's floating-point unit, and propose code that the compiler can easily interleave with other computations. We fully proved the correctness of our algorithm, which mixes floating-point and fixed-bitwidth integer computations, using the Coq proof assistant and successfully integrated it into the CompCert formally verified compiler.
David Monniaux, Alice Pain
ARITH1
2022 Formally verified superblock scheduling
abstract
On in-order processors, without dynamic instruction scheduling, program running times may be significantly reduced by compile-time instruction scheduling. We present here the first effective certified instruction scheduler that operates over superblocks (it may move instructions across branches), along with its performance evaluation. It is integrated within the CompCert C compiler, providing a complete machine-checked proof of semantic preservation from C to assembly.
Cyril Six, Léo Gourdin, Sylvain Boulmé, David Monniaux, Justus Fasse, Nicolas Nardino
CPP4
2022 The Trusted Computing Base of the CompCert Verified Compiler
abstract
Abstract is the first realistic formally verified compiler: it provides a machine-checked mathematical proof that the code it generates matches the source code. Yet, there could be loopholes in this approach. We comprehensively analyze aspects of where errors could lead to incorrect code being generated. Possible issues range from the modeling of the source and the target languages to some techniques used to call external algorithms from within the compiler.
David Monniaux, Sylvain Boulmé
ESOP1
2022 BaxMC: a CEGAR approach to Max#SAT
Thomas Vigouroux, Cristian Ene, David Monniaux, Laurent Mounier, Marie-Laure Potet
FMCAD3
2021 Simple, light, yet formally verified, global common subexpression elimination and loop-invariant code motion
abstract
We present an approach for implementing a formally certified loop-invariant code motion optimization by composing an unrolling pass and a formally certified yet efficient global subexpression elimination. This approach is lightweight: each pass comes with a simple and independent proof of correctness. Experiments show the approach significantly narrows the performance gap between the CompCert certified compiler and state-of-the-art optimizing compilers. Our static analysis employs an efficient yet verified hashed set structure, resulting in fast compilation.
David Monniaux, Cyril Six
LCTES1
2021 Data Abstraction: A General Framework to Handle Program Verification of Data Structures
Julien Braine, Laure Gonnord, David Monniaux
SAS3
2021 A task-based approach to parallel parametric linear programming solving, and application to polyhedral computations
abstract
Summary Parametric linear programming is a central operation for polyhedral computations, as well as in certain control applications. Here, we propose a task‐based scheme for parallelizing it, with quasi‐linear speedup over large problems. This type of parallel applications is challenging, because several tasks might be computing the same region. In this article, we are presenting the algorithm itself with a parallel redundancy elimination algorithm, and conducting a thorough performance analysis.
Camille Coti, David Monniaux, Hang Yu 0005
Concurr. Comput. Pract. Exp.2
2021 The complexity gap in the static analysis of cache accesses grows if procedure calls are added
David Monniaux
Formal Methods Syst. Des.1
2020 Certified and efficient instruction scheduling: application to interlocked VLIW processors
abstract
CompCert is a moderately optimizing C compiler with a formal, machine-checked, proof of correctness: after successful compilation, the assembly code has a behavior faithful to the source code. Previously, it only supported target instruction sets with sequential semantics, and did not attempt reordering instructions for optimization. We present here a CompCert backend for a VLIW core ( i.e. with explicit parallelism at the instruction level), the first CompCert backend providing scalable and efficient instruction scheduling. Furthermore, its highly modular implementation can be easily adapted to other VLIW or non-VLIW pipelined processors.
Cyril Six, Sylvain Boulmé, David Monniaux
Proc. ACM Program. Lang.3
2019 An Efficient Parametric Linear Programming Solver and Application to Polyhedral Projection
Hang Yu 0005, David Monniaux
SAS2
2019 On the decidability of the existence of polyhedral invariants in transition systems
David Monniaux
Acta Informatica1
2019 On the Complexity of Cache Analysis for Different Replacement Policies
abstract
Modern processors use cache memory, a memory access that “hits” the cache returns early, while a “miss” takes more time. Given a memory access in a program, cache analysis consists in deciding whether this access is always a hit, always a miss, or is a hit or a miss depending on execution. Such an analysis is of high importance for bounding the worst-case execution time of safety-critical real-time programs. There exist multiple possible policies for evicting old data from the cache when new data are brought in, and different policies, though apparently similar in goals and performance, may be very different from the analysis point of view. In this article, we explore these differences from a complexity-theoretical point of view. Specifically, we show that, among the common replacement policies, Least Recently Used is the only one whose analysis is NP-complete, whereas the analysis problems for the other policies are PSPACE-complete.
David Monniaux, Valentin Touzeau
J. ACM1
2019 Fast and exact analysis for LRU caches
abstract
For applications in worst-case execution time analysis and in security, it is desirable to statically classify memory accesses into those that result in cache hits, and those that result in cache misses. Among cache replacement policies, the least recently used (LRU) policy has been studied the most and is considered to be the most predictable. The state-of-the-art in LRU cache analysis presents a tradeoff between precision and analysis efficiency: The classical approach to analyzing programs running on LRU caches, an abstract interpretation based on a range abstraction, is very fast but can be imprecise. An exact analysis was recently presented, but, as a last resort, it calls a model checker, which is expensive. In this paper, we develop an analysis based on abstract interpretation that comes close to the efficiency of the classical approach, while achieving exact classification of all memory accesses as the model-checking approach. Compared with the model-checking approach we observe speedups of several orders of magnitude. As a secondary contribution we show that LRU cache analysis problems are in general NP-complete.
Valentin Touzeau, Claire Maïza, David Monniaux, Jan Reineke 0001
Proc. ACM Program. Lang.3
2018 Extending Constraint-Only Representation of Polyhedra with Boolean Constraints
Alexey Bakhirkin, David Monniaux
SAS2
2017 Ascertaining Uncertainty for Efficient Exact Cache Analysis
Valentin Touzeau, Claire Maïza, David Monniaux, Jan Reineke 0001
CAV (2)3
2017 Combining Forward and Backward Abstract Interpretation of Horn Clauses
Alexey Bakhirkin, David Monniaux
SAS2
2017 Scalable Minimizing-Operators on Polyhedra via Parametric Linear Programming
Alexandre Maréchal, David Monniaux, Michaël Périn
SAS2
2016 A Survey of Satisfiability Modulo Theory
David Monniaux
CASC1
2016 Cell Morphing: From Array Programs to Array-Free Horn Clauses
David Monniaux, Laure Gonnord
SAS1
2016 Program Analysis with Local Policy Iteration
Egor George Karpenkov, David Monniaux, Philipp Wendler
VMCAI2
2016 Polyhedral Approximation of Multivariate Polynomials Using Handelman's Theorem
Alexandre Maréchal, Alexis Fouilhé, Tim King 0001, David Monniaux, Michaël Périn
VMCAI4
2015 Synthesis of ranking functions using extremal counterexamples
abstract
We present a complete method for synthesizing lexicographic linear ranking functions (and thus proving termination), supported by inductive invariants, in the case where the transition relation of the program includes disjunctions and existentials (large block encoding of control flow). Previous work would either synthesize a ranking function at every basic block head, not just loop headers, which reduces the scope of programs that may be proved to be terminating, or expand large block transitions including tests into (exponentially many) elementary transitions, prior to computing the ranking function, resulting in a very large global constraint system. In contrast, our algorithm incrementally refines a global linear constraint system according to extremal counterexamples: only constraints that exclude spurious solutions are included. Experiments with our tool Termite show marked performance and scalability improvements compared to other systems.
Laure Gonnord, David Monniaux, Gabriel Radanne
PLDI2
2015 A Simple Abstraction of Arrays and Maps by Program Translation
David Monniaux, Francesco Alberti
SAS1
2014 How to compute worst-case execution time by optimization modulo theory and a clever encoding of program semantics
Julien Henry, Mihail Asavoae, David Monniaux, Claire Maïza
LCTES3
2014 Speeding Up Logico-Numerical Strategy Iteration
David Monniaux, Peter Schrammel
SAS1
2014 Implementing and Reasoning About Hash-consed Data Structures in Coq
Thomas Braibant, Jacques-Henri Jourdan, David Monniaux
J. Autom. Reason.3
2013 Implementing Hash-Consed Structures in Coq
Thomas Braibant, Jacques-Henri Jourdan, David Monniaux
ITP3
2013 Efficient Generation of Correctness Certificates for the Abstract Domain of Polyhedra
Alexis Fouilhé, David Monniaux, Michaël Périn
SAS2
2012 Succinct Representations for Abstract Interpretation - Combined Analysis Algorithms and Experimental Evaluation
Julien Henry, David Monniaux, Matthieu Moy
SAS2
2011 Modular Abstractions of Reactive Nodes Using Disjunctive Invariants
David Monniaux, Martin Bodin
APLAS1
2011 Improving Strategies via SMT Solving
Thomas Gawlitza, David Monniaux
ESOP2
2011 On the Generation of Positivstellensatz Witnesses in Degenerate Cases
David Monniaux, Pierre Corbineau
ITP1
2011 Using Bounded Model Checking to Focus Fixpoint Iterations
David Monniaux, Laure Gonnord
SAS1
2010 Quantifier Elimination by Lazy Model Enumeration
David Monniaux
CAV1
2009 On Using Floating-Point Computations to Help an Exact Linear Arithmetic Decision Procedure
David Monniaux
CAV1
2009 Automatic modular abstractions for linear constraints
abstract
We propose a method for automatically generating abstract transformers for static analysis by abstract interpretation. The method focuses on linear constraints on programs operating on rational, real or floating-point variables and containing linear assignments and tests.
David Monniaux
POPL1
2008 A Quantifier Elimination Algorithm for Linear Real Arithmetic
David Monniaux
LPAR1
2008 The pitfalls of verifying floating-point computations
abstract
Current critical systems often use a lot of floating-point computations, and thus the testing or static analysis of programs containing floating-point operators has become a priority. However, correctly defining the semantics of common implementations of floating-point is tricky, because semantics may change according to many factors beyond source-code level, such as choices made by compilers. We here give concrete examples of problems that can appear and solutions for implementing in analysis software.
David Monniaux
ACM Trans. Program. Lang. Syst.1
2007 Verification of device drivers and intelligent controllers: a case study
abstract
The soundness of device drivers generally cannot be verified in isolation, but has to take into account the reactions of the hardware devices. In critical embedded systems, interfaces often were simple "volatile" variables, and the interface specification typically a list of bounds on these variables. Some newer systems use "intelligent" controllers that handle dynamic worklists in shared memory and perform direct memory accesses, all asynchronously from the main processor. Thus, it is impossible to truly verify the device driver without taking the intelligent device into account, because incorrect programming of the device can lead to dire consequences, such as memory zones being erased.
David Monniaux
EMSOFT1
2007 Optimal Abstraction on Real-Valued Programs
David Monniaux
SAS1
2007 Varieties of Static Analyzers: A Comparison with ASTREE
abstract
We discuss the characteristic properties of ASTREE, an automatic static analyzer for proving the absence of runtime errors in safety-critical real-time synchronous control command C programs, and compare it with a variety of other program analysis tools.
Patrick Cousot, Radhia Cousot, Jérôme Feret, Antoine Miné, Laurent Mauborgne, David Monniaux, Xavier Rival
TASE6
2005 The Parallel Implementation of the Astrée Static Analyzer
David Monniaux
APLAS1
2005 Compositional Analysis of Floating-Point Linear Numerical Filters
David Monniaux
CAV1
2005 The ASTREÉ Analyzer
Patrick Cousot, Radhia Cousot, Jérôme Feret, Laurent Mauborgne, Antoine Miné, David Monniaux, Xavier Rival
ESOP6
2005 Abstract interpretation of programs as Markov decision processes
David Monniaux
Sci. Comput. Program.1
2003 A static analyzer for large safety-critical software
abstract
We show that abstract interpretation-based static program analysis can be made efficient and precise enough to formally verify a class of properties for a family of large programs with few or no false alarms. This is achieved by refinement of a general purpose static analyzer and later adaptation to particular programs of the family by the end-user through parametrization. This is applied to the proof of soundness of data manipulation operations at the machine level for periodic synchronous safety critical embedded software.The main novelties are the design principle of static analyzers by refinement and adaptation through parametrization (Sect. 3 and 7), the symbolic manipulation of expressions to improve the precision of abstract transfer functions (Sect. 6.3), the octagon (Sect. 6.2.2), ellipsoid (Sect. 6.2.3), and decision tree (Sect. 6.2.4) abstract domains, all with sound handling of rounding errors in oating point computations, widening strategies (with thresholds: Sect. 7.1.2, delayed: Sect. 7.1.3) and the automatic determination of the parameters (parametrized packing: Sect. 7.2).
Bruno Blanchet, Patrick Cousot, Radhia Cousot, Jérôme Feret, Laurent Mauborgne, Antoine Miné, David Monniaux, Xavier Rival
PLDI7
2003 Abstract Interpretation of Programs as Markov Decision Processes
David Monniaux
SAS1
2003 Abstraction of Expectation Functions Using Gaussian Distributions
David Monniaux
VMCAI1
2003 Abstracting cryptographic protocols with tree automata
David Monniaux
Sci. Comput. Program.1
2001 Backwards Abstract Interpretation of Probabilistic Programs
David Monniaux
ESOP1
2001 An abstract Monte-Carlo method for the analysis of probabilistic programs
abstract
We introduce a new method, combination of random testing and abstract interpretation, for the analysis of programs featuring both probabilistic and non-probabilistic nondeterminism. After introducing "ordinary" testing, we show how to combine testing and abstract interpretation and give formulas linking the precision of the results to the number of iterations. We then discuss complexity and optimization issues and end with some experimental results.
David Monniaux
POPL1
2001 An Abstract Analysis of the Probabilistic Termination of Programs
David Monniaux
SAS1
2000 Abstract Interpretation of Probabilistic Semantics
David Monniaux
SAS1
1999 Decision Procedures for the Analysis of Cryptographic Protocols by Logics of Belief
abstract
Belief-logic deductions are used in the analysis of cryptographic protocols. We show a new method to decide such logics. In addition to the familiar BAN logic, it is also applicable to the more advanced versions of protocol security logics, and GNY in particular; and it employs an efficient forward-chaining algorithm the completeness and termination of which are proved. Theoretic proofs, implementation decisions and results are discussed.
David Monniaux
CSFW1
1999 Abstracting Cryptographic Protocols with Tree Automata
David Monniaux
SAS1