EDBT 2026 Demo / reviewers in the wild / expert
Leonardo de Moura 0001
dblp:d/LeonardoMdeMoura · also Leonardo Mendonça de Moura
· DBLP profile ↗
44ranked-venue papers
18as first author
5since 2021 · last 2026
0000-0002-5158-4726ORCID · verified
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 26 · 11 first-author · 3 since 2021Theory of computation · 25 · 12 first-author · 3 since 2021Artificial intelligence and machine learning · 17 · 8 first-author · 2 since 2021
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2026 | grind: An SMT-Inspired Tactic for Lean 4 (Short Paper - System Description)abstractAbstract We describe , an SMT-inspired proof automation tactic for Lean 4. Unlike hammer-style tools that translate proof obligations into external logics and invoke external ATP and SMT solvers, works natively in the Calculus of Inductive Constructions, producing kernel-checkable proof terms without any soundness compromises. At its core, combines congruence closure for dependent type theory with E-matching and a suite of satellite solvers for linear integer arithmetic, linear arithmetic over ordered modules, polynomial equations over commutative (semi)rings, and associative-commutative operators. Each satellite solver is parameterized by Lean’s typeclasses, enabling it to operate over any type that implements the appropriate algebraic interface—not just hardcoded numeric types. Users can extend with new theory solvers through a plugin API, control theorem instantiation through instantiation constraints on E-matching patterns, and inspect the internal state through an interactive DSL. An annotation system, including automatic pattern selection, enables libraries to declare how their theorems should be used by . The tactic is distributed as part of Lean and is used extensively in Lean’s Mathlib [19] and CSLib [2] libraries. Kim Morrison, Leonardo de Moura 0001 |
IJCAR (1) | 2 |
| 2022 | Beyond Notations: Hygienic Macro Expansion for Theorem Proving LanguagesabstractIn interactive theorem provers (ITPs), extensible syntax is not only crucial to lower the cognitive burden of manipulating complex mathematical objects, but plays a critical role in developing reusable abstractions in libraries. Most ITPs support such extensions in the form of restrictive "syntax sugar" substitutions and other ad hoc mechanisms, which are too rudimentary to support many desirable abstractions. As a result, libraries are littered with unnecessary redundancy. Tactic languages in these systems are plagued by a seemingly unrelated issue: accidental name capture, which often produces unexpected and counterintuitive behavior. We take ideas from the Scheme family of programming languages and solve these two problems simultaneously by proposing a novel hygienic macro system custom-built for ITPs. We further describe how our approach can be extended to cover type-directed macro expansion resulting in a single, uniform system offering multiple abstraction levels that range from supporting simplest syntax sugars to elaboration of formerly baked-in syntax. We have implemented our new macro system and integrated it into the new version of the Lean theorem prover, Lean 4. Despite its expressivity, the macro system is simple enough that it can easily be integrated into other systems. Sebastian Ullrich 0002, Leonardo de Moura 0001 |
Log. Methods Comput. Sci. | 2 |
| 2022 | 'do' unchained: embracing local imperativity in a purely functional language (functional pearl)abstractPurely functional programming languages pride themselves with reifying effects that are implicit in imperative languages into reusable and composable abstractions such as monads. This reification allows for more exact control over effects as well as the introduction of new or derived effects. However, despite libraries of more and more powerful abstractions over effectful operations being developed, syntactically the common 'do' notation still lags behind equivalent imperative code it is supposed to mimic regarding verbosity and code duplication. In this paper, we explore extending 'do' notation with other imperative language features that can be added to simplify monadic code: local mutation, early return, and iteration. We present formal translation rules that compile these features back down to purely functional code, show that the generated code can still be reasoned over using an implementation of the translation in the Lean 4 theorem prover, and formally prove the correctness of the translation rules relative to a simple static and dynamic semantics in Lean. Sebastian Ullrich 0002, Leonardo de Moura 0001 |
Proc. ACM Program. Lang. | 2 |
| 2021 | The Lean 4 Theorem Prover and Programming LanguageabstractAbstract Lean 4 is a reimplementation of the Lean interactive theorem prover (ITP) in Lean itself. It addresses many shortcomings of the previous versions and contains many new features. Lean 4 is fully extensible: users can modify and extend the parser, elaborator, tactics, decision procedures, pretty printer, and code generator. The new system has a hygienic macro system custom-built for ITPs. It contains a new typeclass resolution procedure based on tabled resolution, addressing significant performance problems reported by the growing user base. Lean 4 is also an efficient functional programming language based on a novel programming paradigm called functional but in-place . Efficient code generation is crucial for Lean users because many write custom proof automation procedures in Lean itself. Leonardo de Moura 0001, Sebastian Ullrich 0002 |
CADE | 1 |
| 2021 | Perceus: garbage free reference counting with reuseabstractWe introduce Perceus, an algorithm for precise reference counting with reuse and specialization. Starting from a functional core language with explicit control-flow, Perceus emits precise reference counting instructions such that (cycle-free) programs are _garbage free_, where only live references are retained. This enables further optimizations, like reuse analysis that allows for guaranteed in-place updates at runtime. This in turn enables a novel programming paradigm that we call _functional but in-place_ (FBIP). Much like tail-call optimization enables writing loops with regular function calls, reuse analysis enables writing in-place mutating algorithms in a purely functional way. We give a novel formalization of reference counting in a linear resource calculus, and prove that Perceus is sound and garbage free. We show evidence that Perceus, as implemented in Koka, has good performance and is competitive with other state-of-the-art memory collectors. Alex Reinking, Ningning Xie, Leonardo de Moura 0001, Daan Leijen |
PLDI | 3 |
| 2020 | Preface: Selected Extended Papers of CADE 2017
Leonardo de Moura 0001 |
J. Autom. Reason. | 1 |
| 2020 | Sealing pointer-based optimizations behind pure functionsabstractFunctional programming languages are particularly well-suited for building automated reasoning systems, since (among other reasons) a logical term is well modeled by an inductive type, traversing a term can be implemented generically as a higher-order combinator, and backtracking search is dramatically simplified by persistent datastructures. However, existing pure functional programming languages all suffer a major limitation in these domains: traversing a term requires time proportional to the tree size of the term as opposed to its graph size. This limitation would be particularly devastating when building automation for interactive theorem provers such as Lean and Coq, for which the exponential blowup of term-tree sizes has proved to be both common and difficult to prevent. All that is needed to recover the optimal scaling is the ability to perform simple operations on the memory addresses of terms, and yet allowing these operations to be used freely would clearly violate the basic premise of referential transparency. We show how to use dependent types to seal the necessary pointer-address manipulations behind pure functional interfaces while requiring only a negligible amount of additional trust. We have implemented our approach for the upcoming version (v4) of Lean, and our approach could be adopted by other languages based on dependent type theory as well. Daniel Selsam, Simon Hudon, Leonardo de Moura 0001 |
Proc. ACM Program. Lang. | 3 |
| 2019 | Mimalloc: Free List Sharding in Action
Daan Leijen, Benjamin G. Zorn, Leonardo de Moura 0001 |
APLAS | 3 |
| 2019 | Learning a SAT Solver from Single-Bit Supervision
Daniel Selsam, Matthew Lamm, Benedikt Bünz, Percy Liang, Leonardo de Moura 0001, David L. Dill |
ICLR (Poster) | 5 |
| 2017 | A metaprogramming framework for formal verificationabstractWe describe the metaprogramming framework currently used in Lean, an interactive theorem prover based on dependent type theory. This framework extends Lean's object language with an API to some of Lean's internal structures and procedures, and provides ways of reflecting object-level expressions into the metalanguage. We provide evidence to show that our implementation is performant, and that it provides a convenient and flexible way of writing not only small-scale interactive tactics, but also more substantial kinds of automation. Gabriel Ebner, Sebastian Ullrich 0002, Jared Roesch, Jeremy Avigad, Leonardo de Moura 0001 |
Proc. ACM Program. Lang. | 5 |
| 2016 | Dependent type practice (invited talk)abstractDependent type theory is a powerful and expressive language for writing mathematical expressions and proofs, but careful design, engineering, and hard work are needed to put the theory into practice. In this talk, I will discuss some of the ideas and techniques that have been used in the design of the Lean theorem prover, a new proof system based on dependent type theory that aims to make the theorem proving process more natural, convenient, and efficient. Leonardo de Moura 0001 |
CPP | 1 |
| 2015 | The Lean Theorem Prover (System Description)
Leonardo de Moura 0001, Soonho Kong, Jeremy Avigad, Floris van Doorn, Jakob von Raumer |
CADE | 1 |
| 2014 | Finding conflicting instances of quantified formulas in SMTabstractIn the past decade, Satisfiability Modulo Theories (SMT) solvers have been used successfully in a variety of applications including verification, automated theorem proving, and synthesis. While such solvers are highly adept at handling ground constraints in several decidable background theories, they primarily rely on heuristic quantifier instantiation methods such as E-matching to process quantified formulas. The success of these methods is often hindered by an overproduction of instantiations which makes ground level reasoning difficult. We introduce a new technique that alleviates this shortcoming by first discovering instantiations that are in conflict with the current state of the solver. The solver only resorts to traditional heuristic methods when such instantiations cannot be found, thus decreasing its dependence upon E-matching. Our experimental results show that our technique significantly reduces the number of instantiations required by an SMT solver to answer "unsatisfiable" for several benchmark libraries, and consequently leads to improvements over state-of-the-art implementations. Andrew Reynolds 0001, Cesare Tinelli, Leonardo de Moura 0001 |
FMCAD | 3 |
| 2013 | Computation in Real Closed Infinitesimal and Transcendental Extensions of the Rationals
Leonardo de Moura 0001, Grant Olney Passmore |
CADE | 1 |
| 2013 | A Model-Constructing Satisfiability Calculus
Leonardo de Moura 0001, Dejan Jovanovic |
VMCAI | 1 |
| 2013 | Efficiently solving quantified bit-vector formulas
Christoph M. Wintersteiger, Youssef Hamadi, Leonardo de Moura 0001 |
Formal Methods Syst. Des. | 3 |
| 2013 | 6 Years of SMT-COMP
Clark W. Barrett, Morgan Deters, Leonardo de Moura 0001, Albert Oliveras, Aaron Stump |
J. Autom. Reason. | 3 |
| 2013 | Cutting to the Chase - Solving Linear Integer Arithmetic
Dejan Jovanovic, Leonardo de Moura 0001 |
J. Autom. Reason. | 2 |
| 2011 | Cutting to the Chase Solving Linear Integer Arithmetic
Dejan Jovanovic, Leonardo de Moura 0001 |
CADE | 2 |
| 2011 | μZ- An Efficient Engine for Fixed Points with Constraints
Krystof Hoder, Nikolaj S. Bjørner, Leonardo de Moura 0001 |
CAV | 3 |
| 2011 | Orchestrating Satisfiability Engines
Leonardo de Moura 0001 |
CP | 1 |
| 2011 | Satisfiability at Microsoft
Leonardo de Moura 0001 |
FMICS | 1 |
| 2011 | On Deciding Satisfiability by Theorem Proving with Speculative Inferences
Maria Paola Bonacina, Christopher Lynch, Leonardo de Moura 0001 |
J. Autom. Reason. | 3 |
| 2010 | Efficiently solving quantified bit-vector formulas
Christoph M. Wintersteiger, Youssef Hamadi, Leonardo de Moura 0001 |
FMCAD | 3 |
| 2010 | Tutorial Presentations at the Twelfth International Conference on Principles of Knowledge Representation and Reasoning
Leonardo de Moura 0001, Carsten Lutz, m. c. schraefel, Bernhard Nebel |
KR | 1 |
| 2010 | Deciding Effectively Propositional Logic Using DPLL and Substitution Sets
Ruzica Piskac, Leonardo de Moura 0001, Nikolaj S. Bjørner |
J. Autom. Reason. | 2 |
| 2009 | On Deciding Satisfiability by DPLL(G+T) and Unsound Theorem Proving
Maria Paola Bonacina, Christopher Lynch, Leonardo de Moura 0001 |
CADE | 3 |
| 2009 | Complete Instantiation for Quantified Formulas in Satisfiabiliby Modulo Theories
Yeting Ge, Leonardo de Moura 0001 |
CAV | 2 |
| 2009 | A Concurrent Portfolio Approach to SMT Solving
Christoph M. Wintersteiger, Youssef Hamadi, Leonardo de Moura 0001 |
CAV | 3 |
| 2009 | Generalized, efficient array decision proceduresabstractThe theory of arrays is ubiquitous in the context of software and hardware verification and symbolic analysis. The basic array theory was introduced by McCarthy and allows to symbolically representing array updates. In this paper we present combinatory array logic, CAL, using a small, but powerful core of combinators, and reduce it to the theory of uninterpreted functions. CAL allows expressing properties that go well beyond the basic array theory. We provide a new efficient decision procedure for the base theory as well as CAL. The efficient procedure serves a critical role in the performance of the state-of-the-art SMT solver Z3 on array formulas from applications. Leonardo de Moura 0001, Nikolaj S. Bjørner |
FMCAD | 1 |
| 2008 | Z3: An Efficient SMT Solver
Leonardo de Moura 0001, Nikolaj S. Bjørner |
TACAS | 1 |
| 2007 | Efficient E-Matching for SMT Solvers
Leonardo de Moura 0001, Nikolaj S. Bjørner |
CADE | 1 |
| 2007 | A Tutorial on Satisfiability Modulo Theories
Leonardo de Moura 0001, Bruno Dutertre, Natarajan Shankar |
CAV | 1 |
| 2007 | Design and results of the 2nd annual satisfiability modulo theories competition (SMT-COMP 2006)
Clark W. Barrett, Leonardo de Moura 0001, Aaron Stump |
Formal Methods Syst. Des. | 2 |
| 2006 | A Fast Linear-Arithmetic Solver for DPLL(T)
Bruno Dutertre, Leonardo de Moura 0001 |
CAV | 2 |
| 2005 | SMT-COMP: Satisfiability Modulo Theories Competition
Clark W. Barrett, Leonardo de Moura 0001, Aaron Stump |
CAV | 2 |
| 2005 | Design and Results of the First Satisfiability Modulo Theories Competition (SMT-COMP 2005)
Clark W. Barrett, Leonardo de Moura 0001, Aaron Stump |
J. Autom. Reason. | 2 |
| 2004 | SAL 2
Leonardo de Moura 0001, Sam Owre, Harald Ruess, John M. Rushby, Natarajan Shankar, Maria Sorea, Ashish Tiwari 0001 |
CAV | 1 |
| 2004 | An Experimental Evaluation of Ground Decision Procedures
Leonardo de Moura 0001, Harald Ruess |
CAV | 1 |
| 2004 | Generating Efficient Test Sets with a Model Checker
Grégoire Hamon, Leonardo de Moura 0001, John M. Rushby |
SEFM | 2 |
| 2003 | Bounded Model Checking and Induction: From Refutation to Verification (Extended Abstract, Category A)
Leonardo de Moura 0001, Harald Ruess, Maria Sorea |
CAV | 1 |
| 2002 | Lazy Theorem Proving for Bounded Model Checking over Infinite Domains
Leonardo de Moura 0001, Harald Ruess, Maria Sorea |
CADE | 1 |
| 1999 | The Spider EnvironmentabstractVisual composition is an interactive development of different applications by the direct manipulation of reusable components. We believe that the visual composition approach deals directly with the complexity of large software systems, making their development easier, more flexible, and easier to be understood. This is accomplished by implementing abstraction, reuse and visualization concepts. The developer becomes a component builder and no longer creates large applications that are hard to maintain and enhance. The user will have the freedom to choose the components he needs to build an application, and to mix and match components from different developers until the desired functionality is achieved. The visual Spider environment allows the creation of different kinds of applications. Copyright © 1999 John Wiley & Sons, Ltd. Leonardo de Moura 0001, Carlos José Pereira de Lucena, Arndt von Staa |
Softw. Pract. Exp. | 1 |
| 1998 | Clone Detection Using Abstract Syntax TreesabstractExisting research suggests that a considerable fraction (5-10%) of the source code of large scale computer programs is duplicate code ("clones"). Detection and removal of such clones promises decreased software maintenance costs of possibly the same magnitude. Previous work was limited to detection of either near misses differing only in single lexems, or near misses only between complete functions. The paper presents simple and practical methods for detecting exact and near miss clones over arbitrary program fragments in program source code by using abstract syntax trees. Previous work also did not suggest practical means for removing detected clones. Since our methods operate in terms of the program structure, clones could be removed by mechanical methods producing in-lined procedures or standard preprocessor macros. A tool using these techniques is applied to a C production software system of some 400 K source lines, and the results confirm detected levels of duplication found by previous work. The tool produces macro bodies needed for clone removal, and macro invocations to replace the clones. The tool uses a variation of the well known compiler method for detecting common sub expressions. This method determines exact tree matches; a number of adjustments are needed to detect equivalent statement sequences, commutative operands, and nearly exact matches. We additionally suggest that clone detection could also be useful in producing more structured code, and in reverse engineering to discover domain concepts and their implementations. Ira D. Baxter, Andrew Yahin, Leonardo de Moura 0001, Marcelo Sant'Anna, Lorraine Bier |
ICSM | 3 |