Rex Page
Design and quality are fundamental themes in engineering education. Functional programming builds
software from small components, a central element of good design, and facilitates reasoning about
correctness, an important aspect of quality. Software engineering courses that employ functional
programming provide a platform for educating students in the design of quality software.
This pearl describes experiments in the use of ACL2, a purely functional subset of Common Lisp
with an embedded mechanical logic, to focus on design and correctness in software engineering
courses. Students find the courses challenging and interesting. A few acquire enough skill to use
an automated theorem prover on the job without additional training. Many students, but not quite a
majority, find enough success to suggest that additional experience would make them effective users
of mechanized logic in commercial software development. Nearly all gain a new perspective on what
it means for software to be correct and acquire a good understanding of functional programming.