# HG changeset patch # User Christian Urban # Date 1259846353 -3600 # Node ID 2656354c7544f73dbfab4a330b2636364390d1db # Parent f1743ce9dbf14bc61c1fd6074443c43304f1425a tuned diff -r f1743ce9dbf1 -r 2656354c7544 ProgTutorial/Advanced.thy --- a/ProgTutorial/Advanced.thy Wed Dec 02 17:08:37 2009 +0100 +++ b/ProgTutorial/Advanced.thy Thu Dec 03 14:19:13 2009 +0100 @@ -14,6 +14,12 @@ chapter {* Advanced Isabelle *} text {* + \begin{flushright} + {\em All things are difficult before they are easy.} \\[1ex] + proverb + \end{flushright} + + \medskip While terms, types and theorems are the most basic data structures in Isabelle, there are a number of layers built on top of them. Most of these layers are concerned with storing and manipulating data. Handling them diff -r f1743ce9dbf1 -r 2656354c7544 ProgTutorial/Essential.thy --- a/ProgTutorial/Essential.thy Wed Dec 02 17:08:37 2009 +0100 +++ b/ProgTutorial/Essential.thy Thu Dec 03 14:19:13 2009 +0100 @@ -14,9 +14,16 @@ chapter {* Isabelle Essentials *} text {* + \begin{flushright} + {\em One man's obfuscation is another man's abstraction.} \\[1ex] + Frank Ch.~Eigler on the Linux Kernel Mailing List,\\ + 24~Nov.~2009 + \end{flushright} + + \medskip Isabelle is build around a few central ideas. One central idea is the LCF-approach to theorem proving where there is a small trusted core and - everything else is build on top of this trusted core + everything else is built on top of this trusted core \cite{GordonMilnerWadsworth79}. The fundamental data structures involved in this core are certified terms and certified types, as well as theorems. diff -r f1743ce9dbf1 -r 2656354c7544 ProgTutorial/Solutions.thy --- a/ProgTutorial/Solutions.thy Wed Dec 02 17:08:37 2009 +0100 +++ b/ProgTutorial/Solutions.thy Thu Dec 03 14:19:13 2009 +0100 @@ -256,10 +256,7 @@ val add_conv = More_Conv.bottom_conv add_simple_conv -fun add_tac ctxt = CONVERSION - (Conv.params_conv ~1 (fn ctxt => - (Conv.prems_conv ~1 (add_conv ctxt) then_conv - Conv.concl_conv ~1 (add_conv ctxt))) ctxt)*} +fun add_tac ctxt = CONVERSION (add_conv ctxt)*} text {* A test case for this conversion is as follows diff -r f1743ce9dbf1 -r 2656354c7544 ProgTutorial/Tactical.thy --- a/ProgTutorial/Tactical.thy Wed Dec 02 17:08:37 2009 +0100 +++ b/ProgTutorial/Tactical.thy Thu Dec 03 14:19:13 2009 +0100 @@ -2402,7 +2402,8 @@ goal states. This can be done with the help of the function @{ML_ind CONVERSION in Tactical}, and also some predefined conversion combinators that traverse a goal - state. The combinators for the goal state are: + state and can selectively apply the conversion. The combinators for + the goal state are: \begin{itemize} \item @{ML_ind params_conv in Conv} for converting under parameters @@ -2448,7 +2449,9 @@ text {* As you can see, the premises are rewritten according to @{ML if_true1_conv}, while - the conclusion according to @{ML true_conj1_conv}. + the conclusion according to @{ML true_conj1_conv}. If we only have one + conversion that should be uniformly applied to the whole goal state, we + can also use @{ML_ind top_conv in More_Conv}. Conversions can also be helpful for constructing meta-equality theorems. Such theorems are often definitions. As an example consider the following diff -r f1743ce9dbf1 -r 2656354c7544 progtutorial.pdf Binary file progtutorial.pdf has changed