File: SKIP-PROOFS.html

package info (click to toggle)
acl2 3.1-1
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 36,712 kB
  • ctags: 38,396
  • sloc: lisp: 464,023; makefile: 5,470; sh: 86; csh: 47; cpp: 25; ansic: 22
file content (104 lines) | stat: -rw-r--r-- 6,086 bytes parent folder | download
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
<html>
<head><title>SKIP-PROOFS.html  --  ACL2 Version 3.1</title></head>
<body text=#000000 bgcolor="#FFFFFF">
<h2>SKIP-PROOFS</h2>skip proofs for a given form -- a quick way to introduce unsoundness
<pre>Major Section:  <a href="OTHER.html">OTHER</a>
</pre><p>


<pre>
Example Form:
(skip-proofs
  (defun foo (x)
    (if (atom x) nil (cons (car x) (foo (reverse (cdr x)))))))<p>

General Form:
(skip-proofs form)
</pre>

where <code>form</code> is processed as usual except that the proof obligations
usually generated are merely assumed.<p>

Normally <code>form</code> is an event; see <a href="EVENTS.html">events</a>.  If you want to put
<code>skip-proofs</code> around more than one event, consider the following
(see <a href="PROGN.html">progn</a>): <code>(skip-proofs (progn event1 event2 ... eventk))</code>.<p>

WARNING:  Skip-proofs allows inconsistent <a href="EVENTS.html">events</a> to be admitted to
the logic.  Use it at your own risk!
<p>
Sometimes in the development of a formal model or proof it is
convenient to skip the proofs required by a given event.  By
embedding the event in a <code>skip-proofs</code> form, you can avoid the
proof burdens generated by the event, at the risk of introducing
unsoundness.  Below we list four illustrative situations in which
you might find <code>skip-proofs</code> useful.<p>

1. The termination argument for a proposed function definition is
complicated.  You presume you could admit it, but are not sure that
your definition has the desired properties.  By embedding the
<code><a href="DEFUN.html">defun</a></code> event in a <code>skip-proofs</code> you can ``admit'' the
function and experiment with theorems about it before undoing
(see <a href="UBT.html">ubt</a>) and then paying the price of its admission.  Note however
that you might still have to supply a measure.  The set of formals
used in some valid measure, known as the ``measured subset'' of the
set of formals, is used by ACL2's induction heuristics and therefore
needs to be suitably specified.  You may wish to specify the special
measure of <code>(:? v1 ... vk)</code>, where <code>(v1 ... vk)</code> enumerates the
measured subset.<p>

2. You intend eventually to verify the <a href="GUARD.html">guard</a>s for a definition but
do not want to take the time now to pursue that.  By embedding the
<code><a href="VERIFY-GUARDS.html">verify-guards</a></code> event in a <code>skip-proofs</code> you can get the system to
behave as though the <a href="GUARD.html">guard</a>s were verified.<p>

3. You are repeatedly recertifying a book while making many
experimental changes.  A certain <code><a href="DEFTHM.html">defthm</a></code> in the book takes a very
long time to prove and you believe the proof is not affected by the
changes you are making.  By embedding the <code><a href="DEFTHM.html">defthm</a></code> event in a
<code>skip-proofs</code> you allow the theorem to be assumed without proof
during the experimental recertifications.<p>

4. You are constructing a proof top-down and wish to defer the proof
of a <code><a href="DEFTHM.html">defthm</a></code> until you are convinced of its utility.  You can
embed the <code>defthm</code> in a <code>skip-proofs</code>.  Of course, you may find
later (when you attempt prove the theorem) that the proposed <code>defthm</code>
is not a theorem.<p>

Unsoundness or Lisp errors may result if the presumptions underlying
a use of <code>skip-proofs</code> are incorrect.  Therefore, <code>skip-proofs</code>
must be considered a dangerous (though useful) tool in system
development.<p>

Roughly speaking, a <code><a href="DEFTHM.html">defthm</a></code> embedded in a <code>skip-proofs</code> is
essentially a <code><a href="DEFAXIOM.html">defaxiom</a></code>, except that it is not noted as an axiom
for the purposes of functional instantiation
(see <a href="LEMMA-INSTANCE.html">lemma-instance</a>).  But a skipped <code><a href="DEFUN.html">defun</a></code> is much more
subtle since not only is the definitional equation being assumed but
so are formulas relating to termination and type.  The situation is
also difficult to characterize if the <code>skip-proofs</code> <a href="EVENTS.html">events</a> are
within the scope of an <code><a href="ENCAPSULATE.html">encapsulate</a></code> in which constrained functions
are being introduced.  In such contexts no clear logical story is
maintained; in particular, constraints aren't properly tracked for
definitions.  A proof script involving <code>skip-proofs</code> should be
regarded as work-in-progress, not as a completed proof with some
unproved assumptions.  A <code>skip-proofs</code> event represents a promise
by the author to admit the given event without further axioms.  In
other words, <code>skip-proofs</code> should only be used when the belief is
that the proof obligations are indeed theorems in the existing ACL2
logical <a href="WORLD.html">world</a>.<p>

ACL2 allows the certification of <a href="BOOKS.html">books</a> containing <code>skip-proofs</code>
<a href="EVENTS.html">events</a>.  This is contrary to the spirit of certified <a href="BOOKS.html">books</a>, since
one is supposedly assured by a valid <a href="CERTIFICATE.html">certificate</a> that a book has
been ``blessed.''  But certification, too, takes the view of
<code>skip-proofs</code> as ``work-in-progress'' and so allows the author of
the book to promise to finish.  When such <a href="BOOKS.html">books</a> are certified, a
warning to the author is printed, reminding him or her of the
incurred obligation.  When <a href="BOOKS.html">books</a> containing <code>skip-proofs</code> are
included into a session, a warning to the user is printed, reminding
the user that the book is in fact incomplete and possibly
inconsistent.  This warning is in fact an error if <code>:skip-proofs-okp</code>
is <code>nil</code> in the <code><a href="INCLUDE-BOOK.html">include-book</a></code> form; see <a href="INCLUDE-BOOK.html">include-book</a>.
<br><br><br><a href="acl2-doc.html"><img src="llogo.gif"></a> <a href="acl2-doc-index.html"><img src="index.gif"></a>
</body>
</html>