| 25 |      1 | <?xml version="1.0" encoding="utf-8"?>
 | 
|  |      2 | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 | 
|  |      3 | <html>
 | 
|  |      4 | <head>
 | 
| 32 |      5 |   <title>Isabelle Programming Tutorial</title>
 | 
| 25 |      6 |   <link rel="stylesheet" href="nominal.css">
 | 
|  |      7 | </head>
 | 
|  |      8 | 
 | 
|  |      9 | <body>
 | 
|  |     10 | <div align="center">
 | 
|  |     11 | <table width="95%">
 | 
|  |     12 | <tbody>
 | 
|  |     13 | <tr>
 | 
|  |     14 | <td align="left">
 | 
|  |     15 | <H1>Aim</H1>
 | 
|  |     16 | 
 | 
|  |     17 | There is already quite good documentation available for users to learn
 | 
|  |     18 | how to interact with Isabelle and to use it for proving
 | 
|  |     19 | theorems (see <A HREF="http://www.cl.cam.ac.uk/research/hvg/Isabelle/documentation.html" target="_top">here</A>).
 | 
|  |     20 | However, the entry barrier for users to program on the ML-level of Isabelle
 | 
|  |     21 | is still unbearably high. In this project we want to change this state
 | 
| 33 |     22 | of affairs by providing a <i>tutorial</i> about ML-coding in Isabelle. 
 | 
| 35 |     23 | At its centre we describe the 
 | 
| 25 |     24 | implementation of a simple prototypical Isabelle package (we describe
 | 
|  |     25 | a simplified version of the inductive package). We hope by 
 | 
|  |     26 | documenting every aspect of this package that in the future you will 
 | 
|  |     27 | be able to modify, extend and adapt this package for your own purposes, 
 | 
|  |     28 | see how developers code in Isabelle and understand better Isabelle's 
 | 
|  |     29 | idiosyncrasies. As a result you will be able to quickly produce code 
 | 
|  |     30 | for your own needs and will be able to participate in keeping Isabelle 
 | 
|  |     31 | alive in the long run. 
 | 
|  |     32 | 
 | 
|  |     33 | <p>
 | 
|  |     34 | Specific topics of the tutorial we have not yet covered: 
 | 
|  |     35 | 
 | 
|  |     36 | <P>
 | 
|  |     37 | <ul>
 | 
|  |     38 | <li> First Steps
 | 
|  |     39 | <ul> 
 | 
|  |     40 | <li>theories, contexts and local theories
 | 
|  |     41 | <li>morphisms
 | 
|  |     42 | <li>name spaces
 | 
|  |     43 | </ul>
 | 
|  |     44 | <li>Parsing
 | 
|  |     45 | <ul>
 | 
|  |     46 | <li>context-, argument- and attribute parsers
 | 
|  |     47 | <li>parsing and printing translations
 | 
|  |     48 | <li>methods
 | 
|  |     49 | </ul>
 | 
|  |     50 | <li>Tactical Reasoning
 | 
|  |     51 | <ul>
 | 
|  |     52 | <li>declarations
 | 
|  |     53 | <li>structured proofs
 | 
|  |     54 | </ul>
 | 
|  |     55 | <li>Advanced Stuff
 | 
|  |     56 | <ul> 
 | 
|  |     57 | <li>user-space type-systems
 | 
|  |     58 | <li>typing algorithms
 | 
|  |     59 | <li>external applications
 | 
|  |     60 | </ul>
 | 
|  |     61 | </ul>
 | 
|  |     62 | <P>
 | 
|  |     63 | 
 | 
|  |     64 | Please help us to expand on this list. 
 | 
|  |     65 | 
 | 
|  |     66 | <H3>We need You</H3>
 | 
|  |     67 | 
 | 
| 32 |     68 | We need help for accomplishing this tutorial. If you are familiar with the 
 | 
|  |     69 | ML-level of Isabelle, please get in contact with us (see addresses below). If you 
 | 
| 25 |     70 | are not familiar, but like to know more about the bits and pieces that make
 | 
|  |     71 | up the Isabelle code, then let us know what you are interested in or what
 | 
|  |     72 | project you like to implement. Above all we like to help future users and 
 | 
|  |     73 | developers of Isabelle; we do not want to end up with some "artificial documentation" 
 | 
|  |     74 | that is of nobody's help. Also proofreading and feedback would be most
 | 
|  |     75 | appreciated.
 | 
|  |     76 | 
 | 
|  |     77 | <H3>People to contact</H3>
 | 
|  |     78 | 
 | 
|  |     79 | The project is managed by
 | 
|  |     80 | 
 | 
|  |     81 | <ul>
 | 
| 32 |     82 | <li> <A HREF="http://www.inf.kcl.ac.uk/staff/urbanc/" target="_top">Christian Urban</A> (christian.urban at kcl ac uk)
 | 
| 25 |     83 | <li> <A HREF="http://www.cl.cam.ac.uk/~lp15/" target="_top">Larry Paulson</A> (lp15 at cam ac uk)
 | 
|  |     84 | <li> <A HREF="http://nicta.com.au/people/norrishm" target="_top">Michael Norrish</A>
 | 
|  |     85 |      (Michael.Norrish at nicta com au)
 | 
|  |     86 | </ul>
 | 
|  |     87 | 
 | 
|  |     88 | There is also the following mailing list that is subscribed by all developers
 | 
|  |     89 | and open for help, suggestions etc. about this project.
 | 
|  |     90 | <p>
 | 
|  |     91 | <A HREF="https://mailmanbroy.informatik.tu-muenchen.de/mailman/listinfo/isabelle-dev">
 | 
|  |     92 | isabelle-dev@mailbroy.informatik.tu-muenchen.de</A>
 | 
|  |     93 | <BR>
 | 
|  |     94 | <p>
 | 
|  |     95 | 
 | 
|  |     96 | <H3>Repository</H3>
 | 
|  |     97 | 
 | 
|  |     98 | A preliminary 
 | 
|  |     99 | <A HREF="http://www4.in.tum.de/~urbanc/cgi-bin/repos.cgi/isabelle-cookbook" target="_top">repository</A>
 | 
|  |    100 | is available and you are very welcome to contribute to it. The current draft of the tutorial is <A HREF="http://www4.in.tum.de/~urbanc/cgi-bin/repos.cgi/isabelle-cookbook/raw-file/tip/progtutorial.pdf" target="_top" onclick="pageTracker._trackPageview('tutorial');">here</A>. 
 | 
|  |    101 | 
 | 
|  |    102 | <H3>Stable Version</H3>
 | 
|  |    103 | 
 | 
|  |    104 | There is no real stable version of the Programming Tutorial yet. If you need a version 
 | 
| 32 |    105 | that is guaranteed to work with Isabelle 2011-1, then please get in touch with me 
 | 
| 38 |    106 | (christian.urban at kcl ac uk).
 | 
| 25 |    107 | 
 | 
|  |    108 | 
 | 
|  |    109 | <H3><A NAME="readers"></A>What early readers said:</H3>
 | 
|  |    110 | 
 | 
|  |    111 | <i>
 | 
|  |    112 | The tutorial really is quite nice. (Jeremy Avigad, CMU, 2011)
 | 
|  |    113 | </i>
 | 
|  |    114 | 
 | 
|  |    115 | <p>
 | 
|  |    116 | <i>
 | 
|  |    117 | By the way, thanks for the Isabelle Cookbook, it's really helpful to 
 | 
|  |    118 | start with Isabelle/ML. (Mathieu Giorgino, 2011)
 | 
|  |    119 | </i>
 | 
|  |    120 | 
 | 
|  |    121 | <p>
 | 
|  |    122 | <i>
 | 
|  |    123 | Great!  This seems to have a lot of the missing pieces I couldn't find  
 | 
|  |    124 | in the tutorial and reference manual. (Kevin Van Horn, 2011)
 | 
|  |    125 | </i>
 | 
|  |    126 | 
 | 
|  |    127 | <p>
 | 
|  |    128 | <i>
 | 
|  |    129 | I've been fighting for hours trying to derive some theorems automatically, 
 | 
|  |    130 | until Florian told me I should try using conversions and then I read the Cookbook 
 | 
|  |    131 | section and it solved my problem. The example with abs_conv in particular was 
 | 
|  |    132 | particularly illuminating. Thanks! (Jasmin Blanchette, TU Munich, 2010)
 | 
|  |    133 | </i>
 | 
|  |    134 | 
 | 
|  |    135 | <p>
 | 
|  |    136 | <i> The cook book seems really helpful, if not even exactly what I need. 
 | 
|  |    137 | (Nils Jähnig, FU Berlin, 2010)</i>
 | 
|  |    138 | 
 | 
|  |    139 | <p>
 | 
|  |    140 | <i>The Programming Tutorial has helped me tremendously to get familiar with
 | 
|  |    141 | Isabelle, which I used in my bachelor thesis about the type-inference algorithm 
 | 
|  |    142 | in Isabelle. (Dmitriy Traytel, TU Munich, 2010)</i>
 | 
|  |    143 | 
 | 
|  |    144 | <p>
 | 
|  |    145 | <i>I've already pointed a couple of PhD students at the programming tutorial, and
 | 
|  |    146 | they've already found it to be a great place to start with Isabelle
 | 
|  |    147 | programming. (Lucas Dixon, University of Edinburgh, 2009)</i> 
 | 
|  |    148 | 
 | 
|  |    149 | <p>
 | 
|  |    150 | <i>The Isabelle Programming Tutorial is great! I finally learned how to add 
 | 
|  |    151 | new keywords and how to parse outer syntax! (Amine Chaieb, University of Cambridge)</i>
 | 
|  |    152 | 
 | 
|  |    153 | <p>
 | 
|  |    154 | <i>I felt the programming tutorial was very clear and comprehensible. I'm
 | 
|  |    155 | toying with actually getting back to Isabelle again. Thanks to 
 | 
|  |    156 | everyone involved in the documentation project. I really think it
 | 
|  |    157 | is worthwhile. (Tom Ridge, University of Cambridge, 2009)</i>
 | 
|  |    158 | 
 | 
|  |    159 | <p>
 | 
|  |    160 | <i>I learned from the tutorial how to deal with fresh variables and also which function to use
 | 
|  |    161 | for applying substitutions that are generated by unification.
 | 
|  |    162 | (Lukas Bulwahn, TU Munich, 2009)</i>
 | 
|  |    163 | 
 | 
|  |    164 | <p>
 | 
|  |    165 | <i> What a great resource! I wish I'd had this when I wrote my first
 | 
|  |    166 | parser in December 2008. 
 | 
|  |    167 | (Timothy Bourke, UNSW Sydney, 2009)</i>
 | 
|  |    168 | 
 | 
|  |    169 | </td>
 | 
|  |    170 | </tr>
 | 
|  |    171 | </tbody>
 | 
|  |    172 | </table>
 | 
|  |    173 | </div>     
 | 
|  |    174 | 
 | 
|  |    175 | 
 | 
|  |    176 | <HR>
 | 
| 34 |    177 | <div id="clustrmaps-widget"></div><script type="text/javascript">var _clustrmaps = {'url' : 'http://www.inf.kcl.ac.uk/staff/urbanc/Cookbook/index.html', 'user' : 948346, 'server' : '4', 'id' : 'clustrmaps-widget', 'version' : 1, 'date' : '2011-10-30', 'lang' : 'en', 'corners' : 'square' };(function (){ var s = document.createElement('script'); s.type = 'text/javascript'; s.async = true; s.src = 'http://www4.clustrmaps.com/counter/map.js'; var x = document.getElementsByTagName('script')[0]; x.parentNode.insertBefore(s, x);})();</script><noscript><a href="http://www4.clustrmaps.com/user/123e787a"><img src="http://www4.clustrmaps.com/stats/maps-no_clusters/www.inf.kcl.ac.uk-staff-urbanc-Cookbook-index.html-thumb.jpg" alt="Locations of visitors to this page" /></a></noscript>
 | 
| 25 |    178 | </a>
 | 
|  |    179 | <p>
 | 
|  |    180 | <P>
 | 
|  |    181 | <a href="http://validator.w3.org/check/referer" target="_top">[Validate this page.]</a>
 | 
|  |    182 | <!-- hhmts start -->
 | 
| 38 |    183 | Last modified: Tue Nov  1 11:26:11 GMT 2011
 | 
| 25 |    184 | <!-- hhmts end -->
 | 
|  |    185 | 
 | 
|  |    186 | </body>
 | 
|  |    187 | </html> |