Single-Threaded Objects in ACL2

  • Robert S. Boyer
  • J. Strother Moore
Conference paper
Part of the Lecture Notes in Computer Science book series (LNCS, volume 2257)


ACL2 is a first-order applicative programming language based on Common Lisp. It is also a mathematical logic for which a mechanical theorem-prover has been implemented in the style of the Boyer-Moore theorem prover. The ACL2 system is used primarily in the modeling and verification of computer hardware and software, where the executability of the language allows models to be used as prototype designs or “simulators.” To support efficient execution of certain kinds of models, especially models of microprocessors, ACL2 provides “singlethreaded objects,” structures with the usual “copy on write” applicative semantics but for which writes are implemented destructively. Syntactic restrictions insure consistency between the formal semantics and the implementation. The design of single-threaded objects has been influenced both by the need to make execution efficient and the need to make proofs about them simple. We discuss the issues.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    E. Barendsen and S. Smetsers. Uniqueness typing for functional languages with graph rewriting semantics. In Mathematical Structures in Computer Science 6, pages 579–612. 1996.MATHMathSciNetGoogle Scholar
  2. 2.
    R. S. Boyer and J S. Moore. A Computational Logic. Academic Press, New York, 1979.MATHGoogle Scholar
  3. 3.
    R. S. Boyer and J S. Moore. A Computational Logic Handbook, Second Edition. Academic Press, New York, 1997.Google Scholar
  4. 4.
    J.-Y. Girard. Linear logic. In Theoretical Computer Science, volume 50, pages 1–102. 1987.MATHCrossRefMathSciNetGoogle Scholar
  5. 5.
    D. Greve, M. Wilding, and D. Hardin. High-speed, analyzable simulators. In Kaufmann et al. [9], pages 113–136.Google Scholar
  6. 6.
    David A. Greve. Symbolic simulation of the JEM1 microprocessor. In G. Gopalakrishnan and P. Windley, editors, Formal Methods in Computer-Aided Design-FMCAD, LNCS 1522. Springer-Verlag, 1998.CrossRefGoogle Scholar
  7. 7.
    David Hardin, Matthew Wilding, and David Greve. Transforming the theorem prover into a digital design tool: From concept car to off-road vehicle. In Alan J. Hu and Moshe Y. Vardi, editors, Computer-Aided Verification-CAV’ 98, volume 1427 of Lecture Notes in Computer Science. Springer-Verlag, 1998. See URL Scholar
  8. 8.
    P. Hudak. Continuation-based mutable abstract data types, or how to have your state and munge it too. Technical Report YaleU/DCS/RR-914, Department of Computer Science, Yale University, July 1992.Google Scholar
  9. 9.
    M. Kaufmann, P. Manolios, and J S. Moore, editors. Computer-Aided Reasoning: ACL2 Case Studies. Kluwer Academic Press, 2000.Google Scholar
  10. 10.
    M. Kaufmann, P. Manolios, and J. S. Moore. Computer-Aided Reasoning: An Approach. Kluwer Academic Press, 2000.Google Scholar
  11. 11.
    Matt Kaufmann and J. Moore. A precise description of the acl2 logic. In Department of Computer Sciences, University of Texas at Austin, 1997.
  12. 12.
    J. S. Moore. Rewriting for symbolic execution of state machine models. In Computer-Aided Verification-CAV’01, volume 2102 of Lecture Notes in Computer Science. Springer-Verlag, 2001. See URL Scholar
  13. 13.
    G. Plotkin. Call-by-name, call-by-value, and the λ-calculus. In Theoretical Computer Science, volume 1, pages 125–159. 1975.MATHCrossRefMathSciNetGoogle Scholar
  14. 14.
    D. Schmidt. Detecting global variables in denotational specifications. ACM Trans. Prog. Lang, 7:299–310, 1985.MATHCrossRefGoogle Scholar
  15. 15.
    G. L. Steele, Jr. Common Lisp The Language, Second Edition. Digital Press, 30 North Avenue, Burlington, MA 01803, 1990.Google Scholar
  16. 16.
    W. Stoye. Message-based functional operating systems. 6(3):291–311, 1986.MATHGoogle Scholar
  17. 17.
    P. Wadler. Monads for functional programming. In Advanced Functional Programming. Springer Verlag, LNCS 925, 1995.Google Scholar
  18. 18.
    P. Wadler. How to declare an imperative. ACM Computing Surveys, 29(3):240–263, September 1997.CrossRefGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2002

Authors and Affiliations

  • Robert S. Boyer
    • 1
  • J. Strother Moore
    • 1
  1. 1.Department of Computer SciencesUniversity of Texas at AustinAustinUSA

Personalised recommendations