• Top
    • Documentation
    • Books
    • Boolean-reasoning
    • Projects
    • Debugging
    • Std
    • Community
    • Proof-automation
    • 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-3-books
              • 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-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
        • Mailing-lists
        • Interfacing-tools
      • Macro-libraries
      • Interfacing-tools
      • Hardware-verification
      • Software-verification
      • Math
      • Testing-utilities
    • Note-8-3
    • Release-notes-books

    Note-8-3-books

    Release notes for the ACL2 Community Books for ACL2 8.3

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

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

    New Libraries

    Alists-light library

    A new library, alists-light has been added. It aims to provide basic reasoning about alists while being as lightweight as possible. See the directory kestrel/alists-light.

    Arithmetic-light library

    A new library, arithmetic-light has been added. It aims to provide basic arithmetic reasoning while being as lightweight as possible. See the directory kestrel/arithmetic-light.

    Axe

    A directory has been started to contain the implementation of Kestrel's Axe tool. This will be populated over time as we open source Axe. See the directory kestrel/axe.

    Booleans library

    A new library, booleans has been added. It provides definitions and rules about operations on booleans. See the directory kestrel/booleans.

    BV (bit vector) library

    A new library, bv, has been added. It contains a formalization of bit vectors as natural numbers. The library underlies several tools developed by Kestrel researchers. See the directory kestrel/bv.

    BV-Lists library

    A new library, bv-lists, has been added. It formalizes notions related to lists of bit vectors from the bv library, including packing, unpacking, and conversions between lists of bits and lists of bytes. See the directory kestrel/bv-lists.

    Centaur meta-reasoning library

    The centaur/meta directory contains various new books focused on meta-reasoning, differing from previous efforts in their use of clause-processors/pseudo-term-fty.lisp to treat pseudo-terms as a sum-of-products type. Among other things, this directory contains an unconditional rewriter, a let-abstraction clause processor, and a clause processor that quickly removes irrelevant parts of a clause during mutual inductions using tools/flag.lisp.

    Cryptocurrency Hierarchical Deterministic Wallet

    This is a simple proof of concept of a hierarchical deterministic wallet for cryptocurrencies, which makes use of the cryptographic, Bitcoin, and Ethereum libraries.

    File-io-light library

    A new library, file-io-light has been added. It aims to provide rules about basic input/output operations on files, while being as lightweight as possible. See the directory kestrel/file-io-light.

    Library-wrappers library

    A new library, library-wrappers, has been added. It contains books that aim to improve other libraries by including them and then disabling or replacing rules that may be problematic. See the directory kestrel/library-wrappers.

    Lists-light library

    A new library, lists-light has been added. It aims to provide basic reasoning about lists while being as lightweight as possible. See the directory kestrel/lists-light.

    Prime-fields library

    A new library, prime-fields has been added. It contains a formalization of prime fields and associated operations. A prime field is a finite field consisting of the integers modulo some prime. See the directory kestrel/prime-fields.

    Standard System Library

    A new library for standard system utilities has been started. This is currently mostly under the Kestrel books, but it will be gradually moved directly under std/system. This new library is being populated with existing utilities factored out of some Kestrel Books with system utilities, as well as with some new utilities.

    Standard Testing Library

    A new library for standard testing utilities has been started. The contents of the files misc/assert.lisp and misc/eval.lisp have been moved here (with the same names), while the two files under misc/ have been turned into relocation stubs. The utilities in those two files have been moved to new individual files for greater modularity. Some new testing utilities have been added to this new library as well.

    Standard Typed Alists Library

    A new library has been added, to collect recognizers and theorems for typed alists, i.e. alists whose keys and values have specified types. This is analogous to Std/typed-lists.

    Changes to Existing Libraries

    ABNF Library

    Some functions have been improved slightly.

    Some theorems have been added.

    Aignet Library

    Added centaur/aignet/cube-sat.lisp, containing utilities for checking satisfiability using satlink of a cube of aignet literals, possibly after applying combinational-equivalence-preserving transformations.

    Apply$ Books

    The proof of lemma apply$-prim-meta-fn-correct is much faster in the "apply-prim" books in directories "system/apply/", "projects/apply-model/", and "projects/apply-model-2/". In particular, the time for proving that lemma in "projects/apply-model-2/apply-prim.lisp" has been measured (on a Mac) at just under 3 minutes after the change but at 27.7 minutes before the change.

    APT

    A new transformation, apt::casesplit, has been added to rephrase a function by cases.

    A new transformation, apt::isodata, has been added to transform data between isomorphic representations.

    apt::parteval now provides better support for recursive functions whose static arguments do not change across recursive calls. apt::parteval has also been extended to support untranslate specifiers.

    apt::restrict now supports reflexive functions, i.e. functions that occur in their termination theorem.

    An input has been added to apt::tailrec to control whether the wrapper function is generated or not.

    A table of APT defaults has been started. See kestrel/apt/utilities/defaults-table.lisp.

    New APT-specific XDOC constructors have been added. Some APT-specific XDOC constructors have been extended and improved.

    Arithmetic-3

    The inclusion of arithmetic-3/floor-mod/mod-expt-fast in arithmetic-3/top has been commented out to prevent clashes with arithmetic-5.

    Arithmetic-5

    The inclusion of arithmetic-5/lib/floor-mod/mod-expt-fast in arithmetic-5/lib/floor-mod/top, which is in turn included by arithmetic-5/top, has been commented out to prevent clashes with arithmetic-3.

    Bitcoin Library

    Some theorems have been added.

    Verified executable attachments have been added for some of the non-executable functions in the BIP 32 formalization.

    Cryptographic Library

    A sub-library for elliptic curves has been added, which currently contains all the secp256k1 domain parameters, and fixtypes for secp256k1 field elements, points, and keys. The parameters and the fixtypes that were previously part of the elliptic curve secp256k1 interface have been removed from that interface, which now includes the domain parameters and the fixtypes from the new sub-library.

    A sub-library for ECDSA (Elliptic Curve Digital Signature Algorithm) has been added, which now contains the secp256k1 signing interface, which was previously part of the elliptic curve secp256k1 interface.

    A sub-library has been added that includes formal specifications for the SHA-2 hash functions: SHA-224, SHA-256, SHA-384, and SHA-512. The new sub-library is in kestrel/crypto/sha-2/.

    A sub-library for KECCAK / SHA-3 hash functions has been added.

    A sub-library has been added that includes formal specifications for HMAC-SHA-256 and HMAC-SHA-512, i.e., for the HMAC keyed-hash message authentication code, using either SHA-256 or SHA-512 as the underlying hash function. The new sub-library is in kestrel/crypto/hmac/.

    A sub-library for Password-Based Key Derivation Function 2 (PBKDF2) as specified by RFC 8018, and specialized to use HMAC SHA-512, has been added. See kdf::pbkdf2-hmac-sha-512.

    A sub-library has been added that includes formal specifications for several common padding operations used in cryptography. The new sub-library is in kestrel/crypto/padding/.

    A macro crypto::definterface-hash has been added to introduce interfaces of hash functions.

    A macro crypto::definterface-hmac has been added to introduce interfaces of HMAC functions.

    A macro crypto::definterface-pbkdf2 has been added to introduce interfaces of PBKDF2 functions.

    A macro crypto::definterface-encrypt-block has been added to introduce interfaces of block encryption/decryption functions.

    A macro crypto::definterface-encrypt-init has been added to introduce interfaces of encryption/decryption functions that use initialization vectors (as in certain block cipher modes of operation).

    Interfaces have been introduced (via crypto::definterface-hash) for the hash functions Keccak-256, Keccak-512, RIPEMD-160, SHA-256, and SHA-512. These supersede the previously existing placeholders for Keccak-256, RIPEMD-160, and SHA-256, which have been removed.

    Interfaces have been introduced (via crypto::definterface-hmac) for the HMAC functions HMAC-SHA-256 and HMAC-SHA-512. These supersede the previously existing placeholder for HMAC-SHA-512, which has been removed.

    Interfaces have been introduced (via crypto::definterface-pbkdf2) for the PBKDF2 functions HMAC-SHA-256 and PBKDF2 HMAC-SHA-512. These supersede the previously existing placeholder for PBKDF2 HMAC-SHA-512, which has been removed.

    Interfaces have been introduced (via crypto::definterface-encrypt-block) for the AES-128, AES-192, and AES-256 block ciphers.

    Interfaces have been introduced (via crypto::definterface-encrypt-init) for the AES-128 CBC PKCS7, AES-192 CBC PKCS7, and AES-256 CBC PKCS7 ciphers (CBC mode, PKCS7 padding).

    The `placeholder' for elliptic curve secp256k1 has been turned into an `interface' for elliptic curve secp256k1, consistently with the changes above. There are no more cryptographic `placeholders', but `interfaces' instead. Their structure is quite similar, but the nomenclature indicates a more permanent status.

    The elliptic curve secp256k1 interface has been extended with an (abstract) signing operation.

    Executable attachments have been added for the Keccak-256 interface that operates on bytes, the SHA-256 interface that operates on bytes, the HMAC-SHA-512 interface, the PBKDF2 HMAC-SHA-512 interface, the secp256k1 interface, and the secp256k1 ECDSA interface.

    Ethereum Library

    A function to construct signed transactions has been added.

    Functions to calculate an account address from a public key and from a private key (via its public key) have been added.

    Event Macros Library

    Utilities for applicability conditions have been added.

    XDOC constructors for documenting the implementation of event macros have been added.

    More XDOC constructors for documenting event macros at the user level have been added.

    Fixtype Definition Library

    The fty::defbyte macro has been improved to generate additional theorems.

    The fty::defbytelist macro has been improved to generate additional theorems.

    The fty::defset macro has been improved to generate additional theorems. It has also been extended with an option :elementp-of-nil, similar to std::deflist, which results in some better theorems when supplied.

    A new macro fty::deffixequiv-sk has been added to automate the proof of fty::deffixequiv theorems for defun-sk (including std::define-sk) functions.

    A new macro fty::defflatsum has been added to introduce ``flat'' (i.e. not tagged) sums of disjoint types.

    GL

    Changed accumulated-persistence-style profiling so that it doesn't count the frames contained in nested applications of a rule multiple times toward that rule's frame count.

    Java Library

    ATJ, the Java Code Generator for ACL2

    The implementation of ATJ has been improved to use a more general abstract syntax and pretty-printer for Java (which are currently part of the implementation of ATJ), instead of writing directly to the output channel piecewise. This provides more flexibility, and the ability to have more code in logic mode and guard-verified.

    ATJ has been extended with an option to generate Java code according to a shallow embedding approach, besides the previous deep embedding approach.

    ATJ has been extended with an option to generate Java code under the assumption that the guards are always satisfied. This option should be used only with guard-verified ACL2 code and with external Java code that calls the generated Java code always with values that satisfy the guards.

    ATJ has been extended with the ability to generate Java code that operates on narrower types than the one for all ACL2 values. This ability is available in the shallow embedding approach, when guards are assumed satisfied.

    ATJ has been extended with the ability to generate Java code that uses Java primitive values and operations. This ability is available in the shallow embedding approach, when guards are assumed satisfied.

    ATJ has been extended with the ability to generate Java code that uses Java primitive arrays and operations, and to destructively update arrays. This ability is available in the shallow embedding approach, when guards are assumed satisfied.

    ATJ has been extended with the ability to generate Java loops from tail-recursive ACL2 functions. This ability is available in the shallow embedding approach, when guards are assumed satisfied.

    A comprehensive tutorial on ATJ has been started. It is available at java::atj-tutorial.

    AIJ, the Deep Embedding of ACL2 into Java

    The return types of some of the methods that provide native Java implementation of the ACL2 primitive functions have been made more precise than the general type Acl2Value. For instance, the method for equal now returns Acl2Symbol.

    Some of the native Java implementations of the ACL2 primitive functions have been optimized.

    Variant native Java implementations of the ACL2 primitive functions have been added that operate on narrower types than the one for all ACL2 values. These are used by ATJ-generated code that operates on narrower types (see release notes about ATJ).

    Native Java implementations of a few more ACL2 built-in functions have been added.

    The documentation of AIJ has been extended and improved. In particular, explicit preconditions have been added for public methods, and explicit invariants have been added for non-public fields and for arguments and results of non-public methods.

    A number of JUnit unit tests have been added for some of the AIJ Java code. More unit tests are planned.

    Java Language Formalization

    An ABNF grammar has been added for the whole Java language, consisting of the lexical and syntactic sub-grammars from the Java language specification. The grammar files have been parsed with the verified ABNF grammar parser, obtaining a formal representation of the grammar of Java, which can be used to formally specify. at a very high and assured level, the concrete syntax of Java. Various properties of the thus-obtained grammar representation (e.g. closure) have been proved, for validation.

    A model of Java Unicode characters has been added, along with a model of their ASCII subset.

    Models have been added of the null and boolean literals, of (non-restricted and restricted) keywords, and of identifiers. The consistency of these models with the grammar (see above) has been proved.

    Models have been added of the decimal, hexadecimal, octal, and binary integer literals. Abstract models have been added of the floating-point literals. Models have been added of the character and string literals.

    A model of the processing of Unicode escapes has been added. This is Java's first lexical translation steps.

    Models have been added of all the boolean and integer operations, as well as of all the primitive conversions on integral values. Abstract models have also been added of all the floating-point operations, as well as of all the primitive conversions involving floating-point values.

    A model of (opaque) pointers has been added. A model of reference values (consisting of pointers and a null reference) has been added. A model of all values, consisting of primitive and reference values, has been added.

    Kestrel Utilities

    Note that some of the books below are not as polished as they could be. Such books contain the text STATUS: IN-PROGRESS near the top of the file.

    A new book, kestrel/utilities/conjunctions contains utilities for manipulating conjunctions.

    A new book, kestrel/utilities/declares0 contains utilities for manipulating declares .

    A new book, kestrel/utilities/def-constant-opener contains a utility that generates an opener theorem for a function when all arguments are constant (this is used by Axe).

    A new book, kestrel/utilities/defopeners contains a utility for making opener rules for recursive functions.

    A new book, kestrel/utilities/deftest, contains a utility, deftest for isolating tests and running them with extensive guard checking.

    A new book, kestrel/utilities/defthm-events contains utilities for processing defthm forms.

    A new book, kestrel/utilities/defun-events contains utilities for processing defun forms.

    A new book, kestrel/utilities/disables disables some built-in functions that may be convenient to have disabled from the start.

    A new book, kestrel/utilities/doublets2 contains utilities that deal with doublets (true lists of length 2).

    A new book, kestrel/utilities/equal-of-booleans, contains rules to break an equality of two booleans into the equivalent conjunction of two implications.

    A new book, kestrel/utilities/erp contains utilities for returning errors (which are often assigned to a variable called erp.

    A new book, kestrel/utilities/forms contains basic utilities about forms that look like function calls.

    A new book, kestrel/utilities/keyword-value-lists2 contains utilities about keyword-value-lists.

    A new book, kestrel/utilities/make-and contains a utility to make an untranslated conjunction.

    A new book, kestrel/utilities/make-and-nice contains a utility to make a, possibly simplified, untranslated conjunction.

    A new book, kestrel/utilities/make-or contains a utility to make an untranslated disjunction.

    A new book, kestrel/utilities/make-or-nice contains a utility to make a, possibly simplified, untranslated disjunction.

    A new book, kestrel/utilities/my-get-event contains a utility to get the (untranslated) event that introduced a function.

    A new book, kestrel/utilities/pack contains utilities for making symbols from strings, natural numbers, characters, and other symbols.

    A new book, kestrel/utilities/remove-duplicates-equal-dollar contains a utility to remove duplicates, keeping the first of each set.

    A new book, kestrel/utilities/smaller-termp, contains a utility to compare the sizes of terms.

    A new book, kestrel/utilities/substitution contains utilities that perform substitution.

    A new book, kestrel/utilities/terms contains various utilities for manipulating terms.

    A new book, kestrel/utilities/world contains utilities for querying the ACL2 logical world.

    Kestrel List Utilities

    A theorem about prefixp has been added.

    Kestrel Oset Theorems

    A theorem has been added.

    Pseudo-good-world

    Some functions have been factored out of the file [book]/system/pseudo-good-worldp.lisp, and put into new individual files, for greater modularity.

    Remove-hyps utility

    Now, remove-hyps succeeds when applied to a call of thm whose formula is not in the form of a valid rewrite rule.

    Standard Association Lists Library

    The functions alist-map-keys and alist-map-vals have been moved to std/alists/ from kestrel/utilities/alists/.

    Standard Basic Library

    The function pos-fix, along with its accompanying theorems and XDOC topic, has been moved from centaur/fty/basetypes.lisp to a new file std/basic/pos-fix.lisp.

    The function symbol-package-name-lst has been moved to the Std extensions in the Kestrel Books, under kestrel/std/basic/.

    The function symbol-package-name-non-cl, originally called symbol-package-name-safe but now renamed, has been moved to the Std extensions in the Kestrel Books, under kestrel/std/basic/.

    The functions organize-symbols-by-name and organize-symbols-by-pkg has been moved to the Std extensions in the Kestrel Books, under kestrel/std/basic/.

    A variant mbt$ of mbt has been introduced, which requires the argument to be just non-nil instead of exactly t. This is in the Std extensions in the Kestrel Books, under kestrel/std/basic/.

    Standard Lists Library

    A file union.lisp has been added with theorems about union-equal.

    Standard STOBJs Library

    The theorems about range equivalences in std/stobjs/updater-independence.lisp have been somewhat improved and a new utility def-range-equiv added to allow defining new types of equivalences over ranges of indices.

    A new book std/stobjs/nicestobj.lisp defines defnicestobj, a utility for defining a stobj with non-interference theorems about its accessors and updaters in the style discussed in stobjs::stobj-updater-independence, with accessors that apply fixing functions to provide unconditionally well-typed results.

    Standard Strings Library

    A variant str::strtok! of str::strtok has been added, which does not treat contiguous delimiters as one. This is under the Std extensions in the Kestrel Books.

    Standard Typed Lists Library

    A file for lists of strings and symbols has been added. The recognizer has been factored out of system/pseudo-good-worldp.lisp.

    Standard Utilities Library

    A new book std/util/defret-mutual-generate provides a utility defret-mutual-generate intended for generating mutually-inductive theorems over large mutual recursions by applying a set of rules referencing the define formals and returns to determine what hypotheses to assume and conclusions to prove about each function in the mutual recursion.

    Defret now substitutes the list of return value names for symbols named <VALUES> in the body and hints.

    A new macro defarbrec (for `define arbitrary recursion') has been added, to introduce recursive functions without having to prove termination right away. There exist similar macros in the community books, but the specifics of this new macro are motivated for use with APT. See the `Related Tools' section of the documentation of defarbrec for more information. This macro is currently in the Std/util extensions in the Kestrel Books, but could be moved to std/util at some point.

    A new macro std::deffixer has been added that automates the definition of fixing functions, and the generation of theorems about them, according to a common pattern. The macro can be extended to cover variations in the pattern if needed. This can be used as a building block for extending fty::deffixtype to generate not only the equivalence, but also the fixer for the fixtype. This macro is currently in the Std/util extensions in the Kestrel Books, but could be moved to std/util at some point.

    A new macro defiso has been added, to establish isomorphic mappings by verification.

    A new macro defmax-nat has been added, to introduce functions to return maxima of sets of natural numbers.

    Tools

    The tool remove-hyps no longer causes an error when the number of prover steps exceeds the value of *default-step-limit* (which is 1152921504606846975). Thanks to Mihir Mehta for reporting this bug. Remove-hyps also avoids skipping proofs, which can lead to false ``theorems''. Thanks to Stephen Westfold for reporting this issue.

    Toothbrush

    Warnings have been eliminated when creating the file books/system/toothbrush/defined-syms.lsp.

    X86ISA

    The following instructions have been added to the model:

    • MOV moffs8, AL
    • MOV moffs16, AX
    • MOV moffs32, EAX
    • MOV moffs64, RAX
    • SHLD r/m16, r16, imm8
    • SHLD r/m32, r32, imm8
    • SHLD r/m64, r64, imm8
    • SHLD r/m16, r16, CL
    • SHLD r/m32, r32, CL
    • SHLD r/m64, r64, CL
    • SHRD r/m16, r16, imm8
    • SHRD r/m32, r32, imm8
    • SHRD r/m64, r64, imm8
    • SHRD r/m16, r16, CL
    • SHRD r/m32, r32, CL
    • SHRD r/m64, r64, CL

    The def-inst macro has been extended to generate more boilerplate code.

    XDOC

    A new generic composite constructor has been added, namely xdoc::ahref.

    The generic composite constructor xdoc::seeurl has been renamed to xdoc::seetopic. The previous name is still temporarily available as a synonym, for compatibility with existing uses.

    Licensing Changes

    Build System Updates

    The `basic' target in GNUmakefile now certifies projects/apply/top.lisp, as is necessary for using defun$ or defwarrant.

    Modified custom makefiles books/projects/apply-model/Makefile and books/projects/apply-model-2/Makefile to avoid apparent mishandling of dependency analysis.

    Testing

    Miscellaneous

    Some xdoc string processing has been made a bit more efficient.

    It was possible for some web-based xdoc manual pages to be mysteriously empty due to control characters in the source documentation. It is now checked before saving a web-based manual that the :short and :long strings, when supplied, consist solely of standard characters (see standard-char-p), except that tabs are also permitted.

    Supporting materials for ACL2 Workshop 2020 have been added. They are in directory workshops/2020/; see the README file there.