Tutorial Description. ACL2 (“A Computational Logic for Applicative Common Lisp”) is both a programming language in which you can model computer systems. ACL2’s logic is constructed on top of a real programming language, Common Lisp, and supports a wide variety of. David Hardin’s current a liation: Ajile Systems. PDF | We describe a tutorial that demonstrates the use of the ACL2 theorem prover. We have three goals: to enable a motivated reader to start.

Author: Tor Voodoorn
Country: Nepal
Language: English (Spanish)
Genre: Spiritual
Published (Last): 12 March 2017
Pages: 135
PDF File Size: 7.20 Mb
ePub File Size: 15.6 Mb
ISBN: 302-5-31921-528-3
Downloads: 46309
Price: Free* [*Free Regsitration Required]
Uploader: Vizshura

To install Dracula using this utility, execute: Dracula The objective of the “Dracula” project is to provide a programming environment for the ACL2 language and theorem prover.

Proof Pad: Introduction

You can read more about ACL2’s two modes here tutoriaal, though this is strictly optional reading; you don’t need to have an intimate understanding of this for Proof Pad, since it abstracts these parts away for you. And what we want for the whole list is list 5 4 3 2 1.

The intent of this is to let you test your functions in the REPL, even if they titorial carefully tutoril enough in the way ACL2 expects to be used in: In order to correct this, we need to add a hypothesis to our property: In order to define a recursive function in ACL2, we need to think about what it would return in a couple of different cases.


This automatic admission occurs in: You can see that this makes the test fail. A test passes when the two arguments to check-expect evaluate to the same thing in this case, the list 5 4 3 2 1.

Aspects of ACL2 User Interaction

The reverse of an empty list is just an empty list: To do this, click on the proof bar next to the function you want to admit. We don’t recommend this, but it is not an uncommon practice for Lisp development.

Download and install from the Racket site. This page provides instructions for downloading the software, working in Racket’s ACL2 language, writing interactive graphical programs, and for reporting bugs. Upgrading To upgrade Dracula, run the following at the command line: One property we can test with DoubleCheck is that reversing a list twice gives you the same list you started with.

Tutorial: reverse of reverse

Thanks to Rex Page for the inspiration for this project, Dale Vaillancourt for the initial implementation, and Matthias Felleisen for his constant support.

For put-at-end x xswe can use append:. Uninstalling To uninstall Dracula, run the following at the command line: This has to do with how ACL2 processes events; the ACL2 “world” must be logically consistent after each and every event, so if you used “foo” before defining it, ACL2 might be accepting something that won’t actually work.

If you don’t, see the troubleshooting page. As you hover over the proof bar, it will show you a preview of what’s going to be done; in particular, if you want to admit an expression, you have to first admit all the expressions above it.


Now you can evaluate expressions in the Interactions Window that refer to the definitions in the Definitions Window. You can see what kinds of values this generator returns by typing it in the REPL.

Proof Pad: Tutorial (reverse)

There are a couple of things to note at this point. The simplest automatic test provided by Proof Pad is afl2. To run your program, click on Run.

The reverse of an empty list is just an empty list:. Finally, we have the body: Try admitting your sum function from before. A doublecheck test has three parts: We could write some more check-expect style tests, but they can only get us so far. Here’s a definition for ‘sum’ that you can either retype or copy and paste: This means that the function call executed without errors.

This way, ACL2 will know to only concern itself with values that satisfy true-listp — values that are lists. This simply means that the code was executed by ACL2 without any problems. Try changing the nil in the definition of rev above to something else, like 1.