• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • Macro-libraries
    • ACL2
      • Theories
      • Rule-classes
      • Proof-builder
      • Recursion-and-induction
      • Hons-and-memoization
      • Events
      • Parallelism
      • History
      • Programming
      • Operational-semantics
      • Real
      • Start-here
        • Gentle-introduction-to-ACL2-programming
        • ACL2-tutorial
        • About-ACL2
          • Recursion-and-induction
          • Operational-semantics
          • Soundness
          • Release-notes
            • Note-2-8
            • Note-2-7
            • Note-8-6
            • Note-8-7
            • Note-8-2
            • Note-7-0
            • Note-8-5
            • Note-8-3
            • Note-8-1
            • Note-8-0
            • Note-7-1
            • Note-6-4
            • Note-2-9-3
            • Note-2-9-1
            • Note-8-4
            • Note-7-2
              • Note-7-2-books
                • Note-7-2-vl
            • Note-6-5
            • Note-4-0
            • Note-2-9-2
            • Note-3-6
            • Note-3-3
            • Note-3-2-1
            • Note-3-0-1
            • Note-2-9-5
            • Note-2-5
            • Note-1-5
            • Note-6-1
            • Note-4-3
            • Note-4-2
            • Note-4-1
            • Note-3-5
            • Note-3-4
            • Note-3-2
            • Note-3-0-2
            • Note-2-9-4
            • Note-2-9
            • Note-1-8
            • Note-1-7
            • Note-1-6
            • Note-1-4
            • Note-1-3
            • Note-7-4
            • Note-7-3
            • Note-6-3
            • Note-6-2
            • Note-6-0
            • Note-5-0
            • Note-1-9
            • Note-2-2
            • Note-1-8-update
            • Note-3-5(r)
            • Note-2-3
            • Release-notes-books
            • Note-3-6-1
            • Note-1-2
            • Note-2-4
            • Note-2-6
            • Note-2-0
            • Note-3-0
            • Note-3-2(r)
            • Note-2-7(r)
            • Note-1-1
            • Note-3-4(r)
            • Note-3-1
            • Note-2-8(r)
            • Note-2-1
            • Note-2-9(r)
            • Note-2-6(r)
            • Note-3-1(r)
            • Note-3-0(r)
            • Note-3-0-1(r)
            • Note-2-5(r)
            • Note-4-3(r)
            • Note-4-2(r)
            • Note-4-1(r)
            • Note-4-0(r)
            • Note-3-6(r)
            • Note-3-3(r)
            • Note-3-2-1(r)
          • Version
          • Acknowledgments
          • Pre-built-binary-distributions
          • Common-lisp
          • Git-quick-start
          • Copyright
          • Building-ACL2
          • ACL2-help
          • Bibliography
      • Debugging
      • Miscellaneous
      • Output-controls
      • Macros
      • Interfacing-tools
    • Interfacing-tools
    • Hardware-verification
    • Software-verification
    • Math
    • Testing-utilities
  • Note-7-2
  • Release-notes-books

Note-7-2-books

Release notes for the ACL2 Community Books for ACL2 7.2 (Jan 2016)

The following is a brief summary of changes made to the community-books between the releases of ACL2 7.1 and 7.2.

See also note-7-2 for the changes made to ACL2 itself. For additional details, you may also see the raw commit log.

New Libraries

kestrel-books

Kestrel Institute's contributions are now available under kestrel/ directory. This directory contains some system utilities to complement the built-in system-utilities. It also includes some general utilities to build and execute tests, retrieve constituents of ACL2 events like defun-sk, etc.

Modeling Algorithms in SystemC and ACL2

David Russinoff has contributed a library, projects/masc/, for modeling algorithms in SystemC and ACL2.

SOFT

Alessandro Coglio has contributed a tool called SOFT (Second-Order Functions and Theorems) that mimics second-order behavior. See tools/soft.lisp.

stateman

J Strother Moore's stateman books are located in projects/stateman/. Stateman is a utility that uses metafunctions to manage large terms tepresenting machine states.

sv

SV is a new hardware verification library from Centaur Technology that includes a vector-based expression representation, efficient symbolic simulation integrated with gl, and support for many SystemVerilog features. It replaces esim as a backend to vl; see sv::sv-versus-esim for a comparison.

x86isa

Shilpi Goel, Warren A. Hunt, Jr., and Matt Kaufmann have contributed a library, projects/x86isa/, containing the specification of the x86 instruction set architecture and utilities to simulate and reason about x86 machine code.

Other new books

A toy cache coherency protocol called VI and its proof of correctness have been contributed by Ben Selfridge and David Rager in projects/cache-coherence/. This effort takes an approach that starts with a goal invariant and develops many helper invariants while trying to prove this goal invariant.

David Russinoff has contributed a proof of the group axioms for the addition operation on the elliptic curve known as Curve25519; these books can be found in projects/curve25519/. Another library in projects/shnf contains a formalization of the theory of sparse Horner normal forms for integer polynomials.

Ben Selfridge has contributed his library projects/sb-machine that contains a formalization of the x86-TSO memory model. This model contains a machine with multiple processors, a shared memory, and store buffers.

The book demos/meta-wf-guarantee-example.lisp has an example that demonstrates the use of :well-formedness-guarantee for meta rules

The book misc/install-not-normalized.lisp installs an unnormalized definition; see install-not-normalized.

The book hints/hint-wrapper.lisp allows you to supply hints in the statement of a theorem; see hint-wrapper.

system/event-names.lisp defines ep and ep- to return the list of event names (resp., excluding those events built into ACL2) with a given case-insensitive prefix.

system/termp.lisp contains work done to verify the guards of the ACL2 built-in function termp.

A new book tools/flag.lisp creates a flag-based induction scheme for a mutual recursion; see make-flag.

New timing tools like oracle-time and oracle-timelimit in tools/oracle-time.lisp provide the run time and bytes allocated during the execution of a form.

A new book tools/removable-runes.lisp automatically computes runes to disable in order to speed up a proof. See removable-runes.

Libraries in workshops/2015/

Supporting materials for some accepted papers in the ACL2 Workshop, 2015 can be found in the directory workshops/2015/.

  • Cuong Chau, Matt Kaufmann, and Warren Hunt contributed their books on Fourier Series Formalization in ACL2(r) in subdirectory chau-kaufmann-hunt/.
  • David Hardin contributed his books involving reasoning about LLVM code using Codewalker in the subdirectory hardin/.
  • Panagiotis Manolios and Mitesh Jain submitted their work on proving skipping refinement with ACL2s in the subdirectory jain-manolios/.
  • Yan Peng and Mark Greenstreet contributed their libraries to extend ACL2 with SMT solvers using SMTLINK in the subdirectory peng-greenstreet/.

Changes to Existing Libraries

ACL2-sedan related books

The book acl2s/defdata/defdata-attach.lisp, which is used to attach or modify metadata for a defdata type, now truely uses defattach for enumerators, i.e., enumerators have constant names that can be attached to different enumerator functions. This facility thus deprecates enum/test and separate test-enumerators. For now, most enumerators are in program mode and non-guard-verified, and hence, defattaching them requires trust-tags.

The cgen books have been updated as follows:

  • Support has been added for collecting statistics on which hypotheses are failing in vacuous tests.
  • First-class support (e.g., for equality) has been added for membership relation/constraint, i.e., member/enum has the same status as range types.
  • Nested testable events like thm, defthm, etc. are not supported anymore. This results in the simplification of the event-stack global to just a event-ctx global, which stores the ctx-form. This simplification also allows us to aim for a global timeout on cgen/testing thm/defthm forms.
  • Support for complex-rationals has been added in number ranges.

The ACL2s::defunc books have been udpated as follows:

  • The print-summary event prints total time taken by defunc events. Now time is only printed twice, once for test? and once for defunc logical events. Both these times are computed using read-run-time ACL2 function and is the accurate run time (not wall-clock time).
  • A new timeout abort event is inserted at the beginning of the defunc/static/non-static events set (generated by defunc-events-with-staticp-flag function) . This event checks if the elapsed time has exceeded the timeout limit and if it has, then it aborts with an error and thus we fall through the outer :OR to the next choice.
  • The program-mode-p predicate function now checks the following: Is there a program-mode sub-function in the body?
  • The cgen-timeout parameter is used to restrict time spent by all the body contract testing as a global timeout.

b*

The syntax for FUN binders patbind-fun has been extended to allow inline/notinline declarations on the resulting FLET forms.

b* now requires that variables be bound to a form and it will no longer treat nil and t as aliases for &. Error messages produced by b* have been made more informative.

bitops

Reduction XOR related functions have been added to the bitops library in parity. Lemmas in bitops::bitops/ihsext-basics have been cleaned up. Theorems about unsigned-byte-p have been added for rotate-right and rotate-left.

A small book about floor has been added: centaur/bitops/floor.lisp.

More slice and merge functions have been added in bitops::bitops/merge. Some integer-length rules in centaur/bitops/integer-length.lisp have been changed to allow better free variable matching.

coi

A new book for reasoning about modular arithmetic using nary congruences has been contributed; see coi/nary/nary-mod.lisp.

Books in coi have been updated so as to avoid name conflicts with std books.

fty

The fty books have been re-organized --- deftypes.lisp has been split up into different files, and tests have been moved to a subdirectory tests/. Performance problems with certain macros, mostly related to reasoning about tag and kind functions, have been fixed.

fty::deftranssum has been extended to support nested fty::defprods.

quicklisp

The bundled quicklisp libraries have been updated. The quicklisp books work only for ACL2 built on CCL or SBCL.

rtl

The rtl/rel11 books have seen many updates, courtesy of Dmitry Nadezhin.

Guards have been added to functions in rtl/rel11/lib/. General cleanup of the rtl/rel11/ books, like removing unnecessary hypotheses and include-books, has also been done.

New radix-aware versions of functions in rtl/rel11/support/ directory have been added. E.g., the old function bitn has a fixed radix of 2 and takes x and n as input arguments and the new radix-aware version corresponding to this function is digitn, which takes the radix b in addition to x and n as inputs.

The books rtl/rel11/support/basic.lisp, rtl/rel11/support/bits.lisp, rtl/rel11/support/float.lisp, rtl/rel11/support/reps.lisp, and rtl/rel11/support/masc.lisp are now certifiable by ACL2(r).

Some books from rtl/rel11/rel9-rtl-pkg/lib, like reps.lisp, rom-helpers.lisp, and simple-loop-helpers.lisp, along with their supporters, have been moved to rtl/rel11/support/.

Bugs in rtl/rel11/lib/excps.lisp related to divide-by-zero exception and the ep exponent width in the function convert-nan-to-op have been fixed.

std

A new macro called impliez has been added in std/basic/defs.lisp. This macro expands to an if, so unlike implies, guards in the consequent can be verified assuming the antecedent.

New theorems about ACL2-count and nth have been added to std/lists/nth.lisp.

The guards of list-equiv in std/lists/list-defuns.lisp have been verified. The function list-fix was tweaked so that it avoids consing if its input is indeed a true-listp. A new function llist-fix, which is logically list-fix but is the identity function for execution, has been also added.

A possibly better non-CCL raw Lisp implementation of bitsets::bignum-extract has been added.

A new rule pick-a-point-subset-constraint-helper was added in std/osets to allow pick-a-point proofs to be used even when subset is disabled.

For define, defretd has been added to go with defret. Also, defret now allows the otf-flg flag. :guard t declarations in define have been eliminated if guards have already been provided. Also, information displayed by pe of functions introduced using define has been cleaned up using pe-table.

A new macro rule is a THM-like version of defrule. Rule and defrule produce leaner output now, almost identical to that produced by thm and defthm.

vl

For details about changes made to VL, see note-7-2-vl.

xdoc

Topics with missing parents are now placed under a new topic xdoc::missing-parents instead of under top.

The title of xdoc manuals can be easily configured by editing xdoc/fancy/config.js. No warning about a redefined topic is produced when the topic is identical to the original one.

xdoc now loads acl2-doc-wrap instead of acl2-doc so that the loaded documentation doesn't overwrite the user's topics.

A bug in see that did not allow properly escaping the printed name of a symbol has been fixed. The implementation of defsection had another bug that caused 'Definitions and Theorems' section to be added to topics even when there were no definitions or theorems in that section; this bug has been fixed as well. Also, defsection does not explicitly turn on error printing during event submission anymore.

The output from xdoc::save now shows more timing information.

Legacy stuff like write-acl2-xdoc, :import option with xdoc::save, and xdoc-verbose has been removed.

Other Libraries

A new book projects/codewalker/demo-fact-partial.lisp is a variant of projects/codewalker/demo-fact.lisp that provides a guide to how Codewalker might be modified so that termination proofs can be avoided or delayed.

Multiple values and stobjs are now supported in the coi/defung/ libraries.

Must-fail and related utilities in misc/eval.lisp produce much less output by default. Also, make-event/eval-check.lisp no longer duplicates code from misc/eval.lisp. Instead, it defines ! utilities that behave like the counterparts previously defined (without the ! suffix).

A bug in remove-hyps that occurred when no proof steps are required in a proof has been fixed.

A new tarai-measure has been added in coi/termination/assuming/complex.lisp, which is allows this book to certify quickly in ACL2(r) as well. Consequently, this book was removed from SLOW_BOOKS in books/GNUmakefile.

Some floating-point support has been added to the JVM M5 model; see models/jvm/m5/m5.lisp.

gl now displays a more informative error message about duplicated indices in :g-bindings.

Satlink now uses drat-trim, available at tools/drat-trim/, instead of drup-trim.

The book tools/untranslate-for-exec.lisp has been improved to handle nested mv-lets.

Deleted Books and Stubs

The book defexec/other-apps/records/records-bsd.lisp has been deleted --- it was out of sync with records.lisp in the same directory.

The book make-event/assert-check-include-1.lisp has been deleted.

The book misc/dead-events.lisp has been moved to tools/dead-events.lisp, and a relocation stub has been added in the older location.

In the directory misc/, *-bsd.lisp books are now reloc_stub books.

Books in projects/concurrent-programs/german-protocol/ have been moved to projects/cache-coherence/german-protocol/.

The rtl/rel10 has been removed from the community books. These books were not in use anywhere in the contributed books.

The book system/gather-dcls.lisp has been deleted after its contents were moved to system/verified-termination-and-guards.lisp.

Licensing Changes

The following books now have BSD-3-Clause license.

  • arithmetic-2/ and arithmetic-3/
  • misc/rtl-untranslate.lisp
  • M5 books models/jvm/m5/
  • rtl books
  • system/cantor-pairing-bijective.lisp
  • tools/with-arith5-help.lisp

Build System Updates

build::cert.pl

The cert.pl documentation at build/doc.lisp has been moved to its own BUILD package.

cert.pl now produces successful certification messages that include times and color coding. cert.pl has also been patched to correctly handle filenames with dollar signs. It has new options for removing .cert.out files after successful certifications and for sending them to a temporary directory.

A new build::cert_param for SMTLINK, uses-smtlink, has been added so that books using it will not be certified unless supporting software such as Z3 is installed. Another cert_param called non-gcl has been added.

A new CERT_PL_SHOW_HOSTNAME environment variable has been added to cert.pl that can show the hostname after each book gets certified.

make system

The topic Books-certification gives clearer instructions on building the books and the manual.

  • make manual now just builds doc/top.cert and system/doc/acl2-manual.cert.
  • make everything now just depends on all the books it was going to build.
  • make quicklisp now just causes an error if USE_QUICKLISP is not set.

Miscellaneous

A new tool build/memsum.pl analyzes memory usage during regressions.

A new tool build/slowevents.pl attempts to identify the slowest events in a book or a set of books.

Subtopics

Note-7-2-vl
Notes about changes to vl and sv in ACL2 7.2.