| 
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>  |