• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
      • Parallelism
      • History
      • Programming
        • Defun
        • Declare
        • System-utilities
        • Stobj
        • State
        • Mutual-recursion
        • Memoize
        • Mbe
        • Io
        • Defpkg
        • Apply$
        • Loop$
        • Programming-with-state
        • Arrays
        • Characters
        • Time$
        • Defmacro
        • Loop$-primer
        • Fast-alists
        • Defconst
        • Evaluation
        • Guard
        • Equality-variants
        • Compilation
        • Hons
        • ACL2-built-ins
        • Developers-guide
          • Developers-guide-background
          • Developers-guide-maintenance
          • Developers-guide-build
          • Developers-guide-utilities
          • Developers-guide-logic
          • Developers-guide-evaluation
          • Developers-guide-programming
          • Developers-guide-introduction
          • Developers-guide-extending-knowledge
          • Developers-guide-examples
          • Developers-guide-contributing
          • Developers-guide-prioritizing
          • Developers-guide-other
          • Developers-guide-emacs
          • Developers-guide-style
          • Developers-guide-miscellany
          • Developers-guide-releases
          • Developers-guide-ACL2-devel
          • Developers-guide-pitfalls
        • System-attachments
        • Advanced-features
        • Set-check-invariant-risk
        • Numbers
        • Efficiency
        • Irrelevant-formals
        • Introduction-to-programming-in-ACL2-for-those-who-know-lisp
        • Redefining-programs
        • Lists
        • Invariant-risk
        • Errors
        • Defabbrev
        • Conses
        • Alists
        • Set-register-invariant-risk
        • Strings
        • Program-wrapper
        • Get-internal-time
        • Basics
        • Packages
        • Oracle-eval
        • Defmacro-untouchable
        • <<
        • Primitive
        • Revert-world
        • Unmemoize
        • Set-duplicate-keys-action
        • Symbols
        • Def-list-constructor
        • Easy-simplify-term
        • Defiteration
        • Fake-oracle-eval
        • Defopen
        • Sleep
      • Operational-semantics
      • Real
      • Start-here
      • Debugging
      • Miscellaneous
      • Output-controls
      • Macros
      • Interfacing-tools
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
    • Testing-utilities
  • Programming

Developers-guide

Guide for ACL2 developers

This guide is NOT intended for the full ACL2 user community. Rather, it is intended for experienced ACL2 users who may wish to become ACL2 developers, that is, to contribute to the maintenance and enhancement of the ACL2 source code. Don't waste your time here unless you're an ACL2 developer, or intending to become one!

ACL2 is maintained solely by Matt Kaufmann and J Moore, although for some time they have occasionally vetted code written by others, ultimately incorporating it into the system. Although this is anticipated to remain the case for some time, a process is underway towards gradually turning maintenance over to some other small group of trusted, reliable, responsible people. This guide was motivated by the desire to begin to support the eventual development of such a group.

(Of course, given the permissive license of ACL2, anyone is allowed to modify a copy of its source code. Here we are talking about what is generally called ``ACL2'', which is distributed from github and from the University of Texas at Austin.)

The first step towards contributing to ACL2 development is to join the acl2-devel mailing list by emailing Matt Kaufmann with a request to be added.

The website for the (first) Developer's Workshop has quite a bit of useful information. It is at:

http://www.cs.utexas.edu/users/moore/acl2/workshop-devel-2017/

Note that for the second Developer's Workshop, some colors were added to this Guide to help guide the discussion. (Colors show up in the web version but not in the ACL2-doc browser.) This red color highlights passages that were to be given some emphasis. Also, in some cases there is a note of the following form, for use in the workshop:

Prospective ACL2 developers are advised to read the paper, “Abbreviated Output for Input in ACL2”, which has a lot of discussion about ACL2 development.

[...SOME NOTES FOR THE WORKSHOP...]

For a small list of potential ACL2 development tasks, see community books file books/system/to-do.txt. If you decide to work on one of these tasks, please make a note (just below the one-line header at the top of the tasks's item) saying that you are doing so. Before you start, ask Matt Kaufmann to commit to incorporating your changes; without a commitment from Matt, he reserves the right not to consider doing so.

The subtopics listed below are sometimes referred to as ``chapters'' of this (Developer's) Guide. They can be read in any order, but on a first read, you may find it helpful to read them in the order in which they appear below.

NEXT SECTION: developers-guide-introduction

Subtopics

Developers-guide-background
Some Implementation Background
Developers-guide-maintenance
Modifying, Testing, and Debugging
Developers-guide-build
Building ACL2 Executables
Developers-guide-utilities
Data Structures and Utilities
Developers-guide-logic
Logical Considerations
Developers-guide-evaluation
How Evaluation Is Implemented in ACL2
Developers-guide-programming
Programming Considerations
Developers-guide-introduction
Introduction
Developers-guide-extending-knowledge
Illustration using tracing, comments and Essays to explore ACL2 behaviors
Developers-guide-examples
ACL2 development examples
Developers-guide-contributing
Contributing changes
Developers-guide-prioritizing
Prioritizing: When to Make Changes
Developers-guide-other
Topics Not Covered
Developers-guide-emacs
Emacs As a Critical Tool for ACL2 Developers
Developers-guide-style
Style Guidelines for Developing ACL2 System Code
Developers-guide-miscellany
Miscellaneous Information
Developers-guide-releases
Releases
Developers-guide-ACL2-devel
Use the acl2-devel List!
Developers-guide-pitfalls
Avoiding potentially common pitfalls