Content-Type: text/enriched
Text-Width: 70

Topic: NOTE-7-5
Parent list: (RELEASE-NOTES)
Source: ACL2 Sources


ACL2 Version 7.5 (xxx, 20xx) Notes


  NOTE! New users can ignore these release notes, because the
  [documentation] has been updated to reflect all changes that are
  recorded here.


  Below we roughly organize the changes to ACL2 since Version 7.4 into
  the following categories of changes: existing features, new
  features, heuristic and efficiency improvements, bug fixes, changes
  at the system level, Emacs support, and experimental versions. Each
  change is described in just one category, though of course many
  changes could be placed in more than one category.


  Note that only ACL2 system changes are listed below. Changes to the
  [books] can be found by browsing the {ACL2+Books GitHub repository
  | https://github.com/acl2/acl2/}, in particular, the raw {commit
  log | https://github.com/acl2/acl2/commits/master}. Also note that
  with each release, some built-in functions that were formerly in
  :[program] mode are now see guard-verified :[logic] mode functions.



Changes to Existing Features


  The macro, [case-match], now treats keywords as constants when they
  occur in patterns. For example, the following form evaluates to 3
  where formerly an error occurred:


    (let ((x '(:foo 3)))
      (case-match x
        ((:foo y) y)
        (& 17)))


  Thanks to Keshav Kini for suggesting this improvement.


  Several changes have been made to [sys-call] and [sys-call+], and a
  new utility, [sys-call*], has been added. These stem from feedback
  from an observation by Eric Smith: sys-call could invoke the
  operating system when simplifying terms (see [sys-call] for an
  example). We thank Eric for helpful discussions. Changes include:


    * When [sys-call] is invoked during a proof (from a prover call or
      invocation of the [proof-builder], it no longer can make a
      (potentially dangerous) call to the operating system. If such
      an invocation occurs during evaluation of a clause-processor or
      metafunction, an error will be signaled.
    * [Sys-call+] continues to call the OS during proofs, but now it only
      does so when applied to the actual ``live'' ACL2 [state].
    * A new utility, [sys-call*], combines some features of [sys-call] and
      [sys-call+]; it takes state and takes effect even during proofs
      like sys-call+, but like sys-call it does not capture output.
      Thus, it can be a good choice in place of sys-call for
      clause-processors and metafunctions, now that sys-call would
      cause an error.
    * The guards are no longer t. Now, the guard for all three functions
      specifies the application of a string (the command) to a true
      list of strings (the arguments).
    * The [executable-counterpart] of [sys-call] is disabled by default.


  Several symbols have been added to the list [*ACL2-exports*].



New Features


  Added utility [checkpoint-summary-limit]. Thanks to Mihir Mehta for
  an email leading to this addition.


  <x-color><param>red3</param>A new utility, [set-register-invariant-risk], provides a way to avoid
  inclusion of the [invariant-risk] check</x-color> in code generated by ACL2
  for executable-counterpart functions (see [evaluation]). The effect
  of set-register-invariant-risk is <x-color><param>red3</param>limited to the enclosing book or
  [encapsulate] event</x-color>.


  The new functions read-object-with-case and
  print-object$-preserving-case is are variants of read-object and
  print-object$, respectively. The function read-object-with-case
  lets you specify that case is preserved, inverted, or converted to
  lower case or (as with read-object) to upper case. The function
  print-object$-preserving-case) prints symbols without escaping them
  for case; for example, the symbol in the current package with name
  @('"abc" is printed as abc, not as |abc| as would be printed by
  print-object$. See [io].



Heuristic and Efficiency Improvements



Bug Fixes


  A small change in [defstobj] can lead to improved automation for some
  [guard] proofs involving [stobj-let]. Thanks to Sol Swords for
  sending an example (included in a Lisp comment in (deflabel
  note-7-4 ...)).


  Formatted printing (with [fmt], [cw], etc.) failed to respect
  newlines encountered while processing ~s and ~S directives. This
  has been fixed; see books/system/tests/fmt-to-string.lisp for
  examples that behave well now but formerly did not. Thanks to Eric
  Smith for pointing out this problem and sending, in essence, the
  following example.


    (cw "~s0"
        (string-append-lst
         (make-list 100
                    :initial-element
                    (coerce '(#A #B #C #D #E #F #G #H #I #J #Newline)
                            'string))))



Changes at the System Level


  <x-color><param>red3</param>When building the combined manual, an error occurs if there is more
  than the single expected broken link.</x-color> Thanks to Alessandro Coglio
  for helpful discussions. Notes. (1) This uses a new keyword argument
  available in [xdoc::save], :broken-links-limit. (2) There is no
  such limit for saving the text-based manual.


  <x-color><param>red3</param>A new documentation topic, [evaluation], explains ACL2 evaluation</x-color>
  with a focus on the notions of the ``executable-counterpart
  function'' (sometimes called the ``*1* function'') and the
  ``submitted function'' (sometimes called the ``raw-Lisp
  function'').



EMACS Support


  Now, tags table TAGS-acl2-doc is automatically built when building
  the manual, or by using the new event [xdoc::save-rendered-event].
  See [ACL2-doc] and see [xdoc::save-rendered-event]. Thanks to Eric
  Smith for discussions leading to this enhancement.



Experimental Versions

