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
|
<html>
<head><title>ZP.html -- ACL2 Version 3.1</title></head>
<body text=#000000 bgcolor="#FFFFFF">
<h2>ZP</h2>testing a ``natural'' against 0
<pre>Major Section: <a href="PROGRAMMING.html">PROGRAMMING</a>
</pre><p>
<code>(Zp n)</code> is logically equivalent to <code>(equal (nfix n) 0)</code> and is
the preferred termination test for recursion down the natural
numbers. <code>(Zp n)</code> returns <code>t</code> if <code>n</code> is <code>0</code> or not a natural
number; it returns <code>nil</code> otherwise. Thus, in the ACL2 logic
(ignoring the issue of <a href="GUARD.html">guard</a>s):
<pre>
n (zp n)
3 nil
0 t
-1 t
5/2 t
#c(1 3) t
'abc t
</pre>
<p>
<code>(Zp n)</code> has a <a href="GUARD.html">guard</a> requiring <code>n</code> to be a natural number.<p>
For a discussion of the various idioms for testing against <code>0</code>,
see <a href="ZERO-TEST-IDIOMS.html">zero-test-idioms</a>.<p>
<code>Zp</code> is typically used as the termination test in recursions down
the natural numbers. It has the advantage of ``coercing'' its
argument to a natural and hence allows the definition to be admitted
without an explicit type check in the body. <a href="GUARD.html">Guard</a> verification
allows <code>zp</code> to be compiled as a direct <code><a href="=.html">=</a></code>-comparision with <code>0</code>.
<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>
|