File: README

package info (click to toggle)
acl2 8.3dfsg-2
  • links: PTS
  • area: main
  • in suites: bullseye
  • size: 309,408 kB
  • sloc: lisp: 3,311,842; javascript: 22,569; cpp: 9,029; ansic: 7,872; perl: 6,501; xml: 3,838; java: 3,738; makefile: 3,383; ruby: 2,633; sh: 2,489; ml: 763; python: 741; yacc: 721; awk: 260; csh: 186; php: 171; lex: 154; tcl: 49; asm: 23; haskell: 17
file content (608 lines) | stat: -rw-r--r-- 24,780 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
; README  --  introduction to misc directory

This directory contains a bunch of ACL2 books that were created over
the years, starting at CLI.  They don't have any relation to each
other; this is really a grab-bag.

===============================================================================

Installation

The makefile and other files all assume that this library is installed in the
local directory that exists in the ACL2 source distribution, i.e., that `..'
is the main directory of ACL2 books, and ../data-structures is the
data-structures library directory.  If for some reason you move this
directory away from here, things will start to break.

To certify all books type

% make all

to certify all books with the ACL2 image "acl2", assuming that the underlying
Lisp creates object files with .o extensions.  You can also do

% make all ACL2=<acl2-image>

===============================================================================

assert.lisp -- an assertion mechanism for use within books

===============================================================================

bash-bsd.lisp, bash.lisp -- simplification of top-level goal

If you submit (bash term), you will get back a list of terms produced by the
ACL2 simplifier.  See the description at the top of bash.lisp for details.

See also defopener.lisp and expander.lisp.

Note: bash.lisp is just bash-bsd.lisp plus xdoc-style documentation.
If you use bash.lisp, you will be including a GPL'ed book (ACL2
community book xdoc/top), but not if you only use bash-bsd.lisp.

===============================================================================

beta-reduce.lisp -- proof of correctness for a beta-reduction routine

The final event in this book illustrates how to use this book to prove
correctness for a simple beta-reduction routine for an arbitrary ACL2
evaluator.

===============================================================================

book-checks.lisp -- utilities for checking that libraries don't
                    enable/disable existing rules unexpectedly

===============================================================================

callers-and-ancestors.lisp -- utilities for finding all callers and
                              ancestors (supporters) of functions; see
                              the book for disclaimers

===============================================================================

character-encoding-test.{acl2,lisp} -- check for handling character encodings

===============================================================================

check-acl2-exports.lisp -- check for accidental omissions from *acl2-exports*

===============================================================================

check-fn-inst.lisp -- check that constraints hold for a functional substitution

===============================================================================

check-state.lisp -- check conditions on state, causing soft error if violated;
                    in particular, check-hons-enabled checks that we are
                    running ACL2(h) (or ACL2(hp)) rather than ACL2

===============================================================================

computed-hint-rewrite.lisp -- interface to the rewriter for computed hints

===============================================================================

computed-hint.lisp -- examples of computed hints

===============================================================================

congruent-stobjs-test.lisp -- examples testing congruent stobjs

===============================================================================

csort.lisp  -- a proof of the ``feed-drain'' systolic sort algorithm

Specification and proof of correctness of an abstract comparator array
sorting algorithm.  This is the comparator array sort whose implementation on
the Motorola CAP DSP model was verified by CLI.  A paper describing this
proof is A Mechanical Checked Proof of a Comparator Sort Algorithm, by
Brock and Moore.

http://www.cs.utexas.edu/users/moore/acl2

===============================================================================

dead-events.lisp -- an analysis tool that shows dependencies, and thus
                    may help to eliminate dead events (both definitions
                    and theorems that do not support the specified events)

===============================================================================

defabsstobj-example-*.lisp -- example uses of defabsstobj

===============================================================================

defattach-bang.lisp -- avoid normal guard verification requirement for a
                       function to be attached to a constrained function

===============================================================================

defattach-example.lisp -- example use of defattach

===============================================================================

definline.lisp -- utility for defining inlined functions

See the documentation provided by the author (Jared Davis) in the file.

===============================================================================

defmac.lisp -- alternative to defmacro that can be more efficient for
               macro expansion

See also :doc defmac after including this book.

===============================================================================

defopener.lisp -- create theorem equating term with its simplification

For documentation:
(include-book "misc/defopener" :dir :system)
followed by
:doc! defopener.

See also bash.lisp and expander.lisp.

===============================================================================

defpm.lisp -- generate measure and termination predicates for
              partial functions

===============================================================================

defproxy-test.lisp -- examples of the use of defproxy

===============================================================================

defp.lisp   -- define partial functions using defp
defpun.lisp -- define partial functions using defpun

The book defpun.lisp books provides a macro, defpun, by which you can
introduce certain tail-recursive function ``definitions'' that do not
always terminate.  The book defp.lisp provides a more powerful macro,
defp, which is built on top of defpun but allows more general forms of
tail recursion than does defpun.

Details of defpun are provided by Manolios and Moore in ``Partial Functions in
ACL2'' http://www.cs.utexas.edu/users/moore/publications/defpun/index.html

===============================================================================

enumerate.lisp -- hint for case-splitting according to a finite range of values

===============================================================================

misc2/defpun-exec-domain-example.lisp -- execute partial functions on a
                                         specified domain

===============================================================================

defun-plus.lisp -- support specifying an "output signature" for a function

===============================================================================

dft.lisp    -- write proofs in a sort of familiar style using dft macro
dft-ex.lisp -- examples of use of dft book

The book dft defines a macro named dft (a named derived from DeFThm).  The book
dft-ex illustrates the macro with a few simple arithmetic proofs.  Basically,
the macro allows you to write proofs in a sort of familiar style.  Here is a
simple example:

(dft comm2-test-1
     (equal (* a (* b c)) (* b (* a c)))
     :rule-classes nil
     :otf-flg nil
     :proof
     ((consider (* a (* b c)))
      (= (* (* a b) c))
      (= (* (* b a) c) :disable (associativity-of-*))
      (= (* b (* a c)))))

Each line in the :proof generates a lemma and at the end all the lemmas
are assembled to prove the main theorem in a pretty empty theory.  You can
see how this is actually done by using :trans1 on the dft command,

ACL2 !>:trans1 (dft comm2-test-1 ...)

and looking at the output.  The second book contains a few more interesting
examples, e.g., of case analysis and other things.  There is no documentation,
but perhaps the examples will help some.

===============================================================================

dijkstra-shortest-path.lisp -- a proof of the correctness of Dijkstra's
                               shortest path algorithm

===============================================================================

disassemble.lisp -- support for disassemble$, an interface to Common
                    Lisp's disassemble utility for showing assembly
                    code for a given function symbol's definition

===============================================================================

equal-by-g.lisp -- a generic theorem for proving that records (in the sense of
the misc/records book) are equal, by showing that any arbitrary field has the
same value in both records.

===============================================================================

eval.lisp -- macros to check evaluation of forms

Utilities defined in this book include the following:

must-eval-to
must-eval-to-t
must-succeed
must-fail
thm?
not-thm?

===============================================================================

evalable-printing.lisp -- a
"beginner-friendly" way of printing objects such that evaluating the
printed result gives that same result

See also ../hacking/evalable-ld-printing.lisp, which prints LD results
in "evalable" way, as provided by "evalable-printing" book.  To
activate, include this book and assign a non-nil value to the state
global EVALABLE-LD-PRINTINGP, as in (assign evalable-ld-printingp t).

===============================================================================

dump-events.lisp  --   file-dumping utility for ACL2
expander.lisp     --   symbolic expansion utilities for ACL2

See also simplify-defuns.lisp for a related tool.

These books contains various experimental symbolic expansion programs for
ACL2, and an event dumping utility.  This stuff can really be helpful when
doing a big project with ACL2.  In expander.lisp the documented macros are
SYMSIM and DEFTHM?.  In dump-events.lisp, see the documentation for
DUMP-EVENTS. 

Unfortunately, the real-world examples of the uses of these utilities are in
proprietary proofs, so all we will do here is give a few hints.  The idea was
to save time in large proofs by using DEFTHM? to pre-compute the reduced
expansions of complex functions.  We used DEFTHM? to write theorems of the
form (EQUAL (HAIRY-FN ...) (... <expanded and reduced body> ...)).  We then
used DUMP-EVENTS to dump the lemmas produced by DEFTHM? to a file, which was
then certified. 

===============================================================================

fast-coerce.lisp -- a replacement for coerce, which speeds up (coerce x 'list)

This just providse the function fast-coerce, which is a drop-in replacement
for coerce and is faster at converting strings to lists.

===============================================================================


fibonacci.lisp -- a thm. on the Fibonacci sequence and greatest common divisor
-- Supporting books: --
int-division.lisp
grcd.lisp

The main theorem main-grcd-fib states that if fib(i) is the ith Fibonacci
number and grcd is the greatest common divisor function, then for positive
integers n and k, grcd(fib(k), fib(n)) = fib(grcd(k,n)).

===============================================================================

file-io.lisp -- utilities for reading and writing files

(read-list fname ctx state) returns (mv nil lst state) where lst is the list
of top-level forms in the file named fname.  Except, if there is an error
then (mv t nil state) is returned.

(write-list list fname ctx state) pretty-prints the given list of forms to
file fname, except that strings are printed without any formatting.

===============================================================================

find-lemmas.lisp -- utility for finding relevant lemmas

(Find-lemmas (fn1 fn2 ...)) returns all lemmas in which all of the indicated
function symbols occur, except those lemmas in the ground-zero world.  In
order to include those as well, give a second argument of nil:
(find-lemmas (fn1 fn2 ...) nil).

If fns is a symbol, then fns is replaced by (list fns).

===============================================================================

gentle.lisp -- analogues of known functions with weaker guards (often, T)

===============================================================================

getprop.lisp -- user-managed fast property lists

The ACL2 utilities GETPROP and PUTPROP take advantage of under-the-hood Lisp
(hashed) property lists.  This book contains an example showing how this works.

===============================================================================

goodstein.lisp -- Goodstein function in ACL2

===============================================================================

hanoi.lisp -- a solution to the Towers of Hanoi problem

===============================================================================

hons-help.lisp and hons-help2.lisp -- support for HONS extension of ACL2

===============================================================================

hons-tests.lisp -- tests of HONS extension of ACL2

===============================================================================

how-to-prove-thms.lisp -- solutions to the exercises in
                          "How To Prove Theorems Formally"

See: http://www.cs.utexas.edu/users/moore/publications/how-to-prove-thms

===============================================================================

integer-type-set-test.lisp -- tests of enhancement to integer reasoning

===============================================================================

invariants.lisp -- tries to prove lemmas stating that if a certain
                   property is true of the arguments to a function,
                   that property will be true of the arguments to all
                   its recursive calls.

===============================================================================

meta-lemmas.lisp  --  meta-lemmas for nth and member

This book simply provides 2 meta-lemmas.  The first, REDUCE-NTH-META-CORRECT,
quickly reduces NTH applied to formal proper lists, e.g.,

(NTH 2 (CONS x (CONS y (CONS z NIL)))) ==> z.

The second, REDUCE-MEMBER-META-CORRECT, quickly transforms MEMBER applied to
EQLABLE-LISTP constants to nested IFs, e.g.,

(MEMBER x '(:MEDIUM LARGE)) ==> (IF (EQL x :MEDIUM) '(:MEDIUM :LARGE)
                                    (IF (EQL x :LARGE) '(:LARGE)
                                        NIL)),

which is propositionally equivalent to (OR (EQL x :MEDIUM) (EQL x :LARGE)).

===============================================================================

misc2/misc.lisp -- miscellaneous support, e.g. for lemmas proved to support
                   decisions made in the ACL2 sources

===============================================================================

mult.lisp -- verification of a multiplication program written for the Mostek
             6502 microprocessor

As described near the top of the file, this solves a challenge posed by Bill
Legato, to prove that a program written for the Mostek 6502 microprocessor
correctly implements multiplication.

===============================================================================

multi-v-uni.lisp -- support for the paper by J Moore, "A Mechanically
                    Checked Proof of a Multiprocessor Result via a
                    Uniprocessor View"

===============================================================================

nested-stobj-tests.lisp -- tests for nested stobjs (and stobj-let)

===============================================================================

oprof.lisp -- simple performance profiling tool for OpenMCL

This book only works on the OpenMCL-based version of ACL2.  It implements a 
simple performance profiler that allows you to see which functions are taking
the most time during some computation.  See the comments inside this book for 
usage instructions and examples.  Also note that this book uses a ttag, so to
include it you will need to run something like this:
  (include-book "misc/oprof" :dir :system :ttags '(oprof)).

===============================================================================

priorities.lisp -- priority-based rewriting

===============================================================================

problem13.lisp -- solution to a UTCS Problem 13

The theorem shows that a function on the naturals satisfying a certain property
must be the identity function.

===============================================================================

process-book-readme.lisp -- checker for Readme.lsp for user-contributed books

===============================================================================

profiling.lisp -- support for profiling functions in some host Lisps

See the documentation at the top of the file.

===============================================================================

qi.lisp and qi-correct.lisp -- unlabeled BDDs (ubdds) and correctness thereof

===============================================================================

radix.lisp -- support for radix conversion

===============================================================================

random.lisp -- a pseudo-random number generator

===============================================================================

records.lisp   --  canonical key-value record structures
  [also records-bsd.lisp: BSD-licensed version of the above]
records0.lisp  --  canonical key-value record structures

These books provide similar functionality, though the approaches differ; the
history is given below.  Their purpose is to make it convenient to reason about
finite functions, which we call "record structures" and can be thought of as
(finite) lists of field-value pairs.  Why not simply use association lists?
Imagine for example starting with the empty record (function), then associating
'a with 1 and then 'b with 2.  Presumably the result would be '((b . 2) (a
. 1)).  But if the updates were done in the other order, then the result would
presumably be '((a . 1) (b . 2)).  Sometimes it is convenient to have only one
"canonical" representation for a finite function.  The record books provide
such a representation, as explained in comments near the top.

Rob Sumners originally created a book of record structures such that two such
structures with the same field-value associations are equal.  However, exported
lemmas required hypotheses that the structures were well-formed.

Matt Kaufmann eliminated the need for such hypotheses.  Instead, all that was
necessary was that the fields are symbols.  Matt posted this problem to the
acl2 mailing list, and Matt WIlding also came up with such a solution (not
included here).

Meanwhile, Pete Manolios was pushing for a total order on the ACL2 universe,
and he created events for such a purpose.  Ultimately, built-in ACL2 function
lexorder was made a total order, and Pete's events were modified to use
lexorder.  The result is total-order.lisp (documented in brief below).

Rob Sumners subsequently made some modifications to Matt Kaufmann's book,
primarily by using the total-order book to eliminate hypotheses that keys are
symbols.  The result is essentially records0.lisp.

Later, Rob came up with an alternate, simpler approach to providing the same
exported theorems.  The result is records.lisp.

===============================================================================

redef-pkg.lisp -- handy (though potentially unsound) utility for adding
                  symbols to packages

===============================================================================

misc2/reverse-by-separation.lisp -- destructive linked-list program
                                    verification example

Quoting the file:

; The following proof is a translation to ACL2 of a proof by Magnus Myreen
; (Univ. of Cambridge), inspired by separation logic, about reversing linked
; lists.

===============================================================================

rtl-untranslate.lisp -- replacement for untranslate suitable rtl functions

===============================================================================

misc2/ruler-extenders-tests.lisp -- tests for ruler-extenders

This suite of tests is mainly for regression, though users interested
in more information about ruler-extenders, beyond that provided in
:doc ruler-extenders, may find this file to be interesting.

===============================================================================

save-time.lisp -- utility for saving times into the ACL2 state and for printing
                  those saved times

===============================================================================

seq.lisp -- the seq macro language
seqw.lisp -- the seqw macro language
seq-examples.lsp -- examples of using the seq macro
seqw-examples.lsp -- examples of using the seqw.macro

SEQ is a macro language for implementing parsers or otherwise applying
"actions" to "streams".  See the comments at the top of seq.lisp and also
see the examples in seq-examples.lsp for more information.

===============================================================================

simplify-defuns.lisp -- simplify definitions in a file and prove equivalence

See simplify-defuns.txt (which can be printed out as 8 pages with 12 point
courier font).  Also see expander.lisp for a related tool.

===============================================================================

simplify-thm.lisp -- a simple event generator which breaks a term
                     thought to be a theorem into some number of
                     theorems of a form where none of the hyps nor the
                     conclusion contain IFs.

Someone may wish to extend this with rule-classes and other more
flexible options.

===============================================================================

sin-cos.lisp  --  rational approximations to SIN and COS with Maclaurin series

This library contains both "obvious" and "fast" series approximation functions
for SIN and COS.  Homework:  Prove that the "fast" and "obvious" versions are
identical.

===============================================================================

sort-symbols.lisp -- correctness of a mergesort routine for symbols, used
                     by defpkg

===============================================================================

misc2/step-limits.lisp -- basic tests for checking that step limits work

===============================================================================

sticky-disable.lisp -- theory maintenance in spite of included books

This book uses ACL2 tables to specify rules that should remain enabled or
disabled even after an include-book.  Macros sticky-disable and sticky-enable
allow the specification of these rules, and macro sticky-include-book
implements the specified enabling and disabling after include-book.

===============================================================================

symbol-btree.lisp -- log time access on a key

A symbol-btree is a data structure of the form (symbol value left . right)
where left and right are symbol-btrees.  These data structures give faster
access to values than alists, using function (symbol-btree-lookup key btree).
See the top of the file for examples and a relevant theorem.

===============================================================================

total-order.lisp -- total order for ACL2
total-order-bsd.lisp -- BSD-licensed version of the above

===============================================================================

trace-star.lisp -- a beginner-friendly variant of trace$.  Features
"evalable" printing, provided by "evalable-printing" book, and
other modifications.

===============================================================================

transfinite.lisp -- generic proof by strong ordinal induction

This book presents a way to use functional instantiation to reduce a theorem to
its inductive step in a proof by transfinite induction.  There is an example in
the book that shows how this works.

===============================================================================

untranslate-patterns.lisp -- simple, pattern-based untranslation for ACL2

===============================================================================

wet.lisp -- a backtrace utility (see :DOC wet)

===============================================================================