ACL2, a Common Lisp-based language for programming and theorem proving, has enjoyed industrial success despite lacking modern language features such as a module system. In previous work, we equipped ACL2 with modules, interfaces, and explicit linking and measured our system with a series of experiments. One experiment revealed a serious lack of expressivity; the interfaces cannot describe the induction schemes necessary to reason about exported functions with nontrivial patterns of recursion. In this paper we revise our language, Modular ACL2, to overcome this weakness. The first novelty is the inclusion of manifest function definitions in interfaces from which ACL2 can infer induction schemes. The second novelty consists of the first proofs of soundness and expressivity for Modular ACL2; we also reaffirm the usefulness of our system with updated benchmarks.
Categories and Subject Descriptors
Programs and ProofsOver the past two decades, a number of industrial labs have adopted ACL2 as a primary tool. The ACL2 system combines a purely functional, first-order subset of Common Lisp with the latest incarnation of the Boyer-Moore theorem prover [12,13]. Roughly speaking, it extends first-order logic with axioms based on the function definitions in a program. Industrial programmers use ACL2 primarily as a modeling language for hardware and low-level software components. A typical usage pattern is to model the component as an ACL2 program, to validate the model with the (very large) preexisting test suite for the component, and then to prove the desired theorems about the component via the model.Four years ago, we started supporting Rex Page's educational project of training software engineering students in high-assurance methods with ACL2 [21]. Page's year-long course sequence introduces students to unit testing, integration testing, random testing, and theorem proving-all available in Dracula, our dialect of * This research was partially supported by several grants from the National Science Foundation.Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. PPDP'09, September 7-9, 2009, Coimbra, Portugal. Copyright c 2009 ACM 978-1-60558-568-0/09/09. . . $10.00 ACL2 [22,26]. While Page's first course focuses on small, singleprogrammer projects, the second course applies these techniques in a team-programming context.The problem for both industrial and educational uses of ACL2 is that its programming language lacks a modern module system, and the theorem prover doesn't support modular reasoning. Modules and interfaces provide scope, abstraction, and specification boundaries, as well as reusable components. These principles are especially important for ACL2. Wit...