Leonardo de Moura 0001

dblp:d/LeonardoMdeMoura · also Leonardo Mendonça de Moura · DBLP profile ↗
← Back
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
YearPublicationVenuePosition
2026 grind: An SMT-Inspired Tactic for Lean 4 (Short Paper - System Description)
abstract
Abstract 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 Languages
abstract
In 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)
abstract
Purely 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 Language
abstract
Abstract 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
CADE1
2021 Perceus: garbage free reference counting with reuse
abstract
We 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
PLDI3
2020 Preface: Selected Extended Papers of CADE 2017
Leonardo de Moura 0001
J. Autom. Reason.1
2020 Sealing pointer-based optimizations behind pure functions
abstract
Functional 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
APLAS3
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 verification
abstract
We 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)
abstract
Dependent 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
CPP1
2015 The Lean Theorem Prover (System Description)
Leonardo de Moura 0001, Soonho Kong, Jeremy Avigad, Floris van Doorn, Jakob von Raumer
CADE1
2014 Finding conflicting instances of quantified formulas in SMT
abstract
In 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
FMCAD3
2013 Computation in Real Closed Infinitesimal and Transcendental Extensions of the Rationals
Leonardo de Moura 0001, Grant Olney Passmore
CADE1
2013 A Model-Constructing Satisfiability Calculus
Leonardo de Moura 0001, Dejan Jovanovic
VMCAI1
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
CADE2
2011 μZ- An Efficient Engine for Fixed Points with Constraints
Krystof Hoder, Nikolaj S. Bjørner, Leonardo de Moura 0001
CAV3
2011 Orchestrating Satisfiability Engines
Leonardo de Moura 0001
CP1
2011 Satisfiability at Microsoft
Leonardo de Moura 0001
FMICS1
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
FMCAD3
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
KR1
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
CADE3
2009 Complete Instantiation for Quantified Formulas in Satisfiabiliby Modulo Theories
Yeting Ge, Leonardo de Moura 0001
CAV2
2009 A Concurrent Portfolio Approach to SMT Solving
Christoph M. Wintersteiger, Youssef Hamadi, Leonardo de Moura 0001
CAV3
2009 Generalized, efficient array decision procedures
abstract
The 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
FMCAD1
2008 Z3: An Efficient SMT Solver
Leonardo de Moura 0001, Nikolaj S. Bjørner
TACAS1
2007 Efficient E-Matching for SMT Solvers
Leonardo de Moura 0001, Nikolaj S. Bjørner
CADE1
2007 A Tutorial on Satisfiability Modulo Theories
Leonardo de Moura 0001, Bruno Dutertre, Natarajan Shankar
CAV1
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
CAV2
2005 SMT-COMP: Satisfiability Modulo Theories Competition
Clark W. Barrett, Leonardo de Moura 0001, Aaron Stump
CAV2
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
CAV1
2004 An Experimental Evaluation of Ground Decision Procedures
Leonardo de Moura 0001, Harald Ruess
CAV1
2004 Generating Efficient Test Sets with a Model Checker
Grégoire Hamon, Leonardo de Moura 0001, John M. Rushby
SEFM2
2003 Bounded Model Checking and Induction: From Refutation to Verification (Extended Abstract, Category A)
Leonardo de Moura 0001, Harald Ruess, Maria Sorea
CAV1
2002 Lazy Theorem Proving for Bounded Model Checking over Infinite Domains
Leonardo de Moura 0001, Harald Ruess, Maria Sorea
CADE1
1999 The Spider Environment
abstract
Visual 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 Trees
abstract
Existing 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
ICSM3