Results

**1 - 4**of**4**### Modular ACL2

"... In the early 1980s, Boyer and Moore decided to re-build their Nqthm theorem prover [1] for a first-order, functional subset of a standardized, industrial programming language: Common Lisp [8]. The resulting system, ACL2, was an attempt to piggy-back theorem proving on the expected success of Lisp an ..."

Abstract
- Add to MetaCart

In the early 1980s, Boyer and Moore decided to re-build their Nqthm theorem prover [1] for a first-order, functional subset of a standardized, industrial programming language: Common Lisp [8]. The resulting system, ACL2, was an attempt to piggy-back theorem proving on the expected success of Lisp and functional programming. Although Common Lisp didn’t succeed, ACL2 became the most widely used theorem prover in industry. Over the past 20 years, numerous hardware and software companies turned to ACL2 to verify critical pieces of their products [5]; by 2006, their contributions to the ACL2 regression test suite exceeded one million lines of code. The ACL2 team received the 2005 ACM Systems Award for their achievement. 1 During those 20 years, programming language theory and practice also evolved. In particular, programming language designers have designed, implemented, and experimented with numerous module systems for managing large functional programs [4]. One major goal of these design efforts has been to help programmers reason locally about their code. That is, a module should express its expectations about imports, and all verification efforts for definitions in a module should be conducted with respect to these expectations. Common Lisp and thus ACL2, however, lack a proper module system. Instead, ACL2 programmers use Common Lisp’s package system and ad hoc tools for proof encapsulation and instantiation, plus usage patterns that mimic modular programming. Naturally, the manual maintenance of abstraction boundaries is difficult and error prone. Worse, it forces the programmer to choose between local reasoning and end-to-end execution, as functions defined in an encapsulated proof cannot be run. Since manual programming patterns are laborious and error-prone, we have developed Modular ACL2, an extension of ACL2 with a module system. This new language is implemented on top of Dracula [2], our dialect of ACL2 [9]. The module system takes its inspiration from the PLT Scheme 1

### Computational Logic in the Undergraduate Curriculum

"... Logic provides the mathematical basis for hardware design and software development. In fact, digital circuits and computer programs are logic formulas expressed in a formal language. Accordingly, educated computer scientists should have experience in reasoning about the formulas that their digital c ..."

Abstract
- Add to MetaCart

Logic provides the mathematical basis for hardware design and software development. In fact, digital circuits and computer programs are logic formulas expressed in a formal language. Accordingly, educated computer scientists should have experience in reasoning about the formulas that their digital circuits and programs represent. An exemplary way to get this experience is to use computational logic in support of such reasoning. This paper searches the typical undergraduate curriculum in computer science for opportunities to include material on computational logic in the context of hardware and software design and implementation. It explains how computational logic has been included as an element of two courses required in most computer science programs. It discusses some successes and a few missteps that the author has experienced over the past nine years in developing this material and using it in the classroom, and it suggests opportunities for similar efforts in other courses.

### Computational Logic in the Undergraduate Curriculum

"... Logic provides the mathematical basis for hardware design and software development. In fact, digital circuits and computer programs are logic formulas expressed in a formal language. Accordingly, educated computer scientists should have experience in reasoning about the formulas that their digital c ..."

Abstract
- Add to MetaCart

Logic provides the mathematical basis for hardware design and software development. In fact, digital circuits and computer programs are logic formulas expressed in a formal language. Accordingly, educated computer scientists should have experience in reasoning about the formulas that their digital circuits and programs represent. An exemplary way to get this experience is to use computational logic in support of such reasoning. This paper searches the typical undergraduate curriculum in computer science for opportunities to include material on computational logic in the context of hardware and software design and implementation. It explains how computational logic has been included as an element of two courses required in most computer science programs. It discusses some successes and a few missteps that the author has experienced over the past nine years in developing this material and using it in the classroom, and it suggests opportunities for similar efforts in other courses. Categories and Subject Descriptors D.2.4 [Software Engineering]: Software/program verification – correctness proofs, formal methods.