--- a/ProgTutorial/Advanced.thy Wed Dec 02 03:46:32 2009 +0100
+++ b/ProgTutorial/Advanced.thy Wed Dec 02 17:06:41 2009 +0100
@@ -16,14 +16,14 @@
text {*
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 properly is an essential skill for Isabelle programming. The most basic
- layer are theories. They contain global data and can be seen as the
- ``long-term memory'' of Isabelle. There is usually only one theory
- active at each moment. Proof contexts and local theories, on the
+ layers are concerned with storing and manipulating data. Handling them
+ properly is an essential skill for programming on the ML-level of Isabelle
+ programming. The most basic layer are theories. They contain global data and
+ can be seen as the ``long-term memory'' of Isabelle. There is usually only
+ one theory active at each moment. Proof contexts and local theories, on the
other hand, store local data for a task at hand. They act like the
- ``short-term memory'' and there can be many of them that are active
- in parallel.
+ ``short-term memory'' and there can be many of them that are active in
+ parallel.
*}
section {* Theories\label{sec:theories} (TBD) *}
--- a/ProgTutorial/Essential.thy Wed Dec 02 03:46:32 2009 +0100
+++ b/ProgTutorial/Essential.thy Wed Dec 02 17:06:41 2009 +0100
@@ -1087,9 +1087,20 @@
end"
"NONE"}
- In order to find a
- reasonable solution for a unification problem, Isabelle also tries first to
- solve the problem by higher-order pattern unification.
+ In order to find a reasonable solution for a unification problem, Isabelle
+ also tries first to solve the problem by higher-order pattern
+ unification. Only in case of failure full higher-order unification is
+ called. This function has a built-in bound, which can be accessed and
+ manipulated as a configuration value:
+
+ @{ML_response_fake [display,gray]
+ "Config.get_thy @{theory} (Unify.search_bound_value)"
+ "Int 60"}
+
+ If this bound is reached during unification, Isabelle prints out the
+ warning message @{text [quotes] "Unification bound exceeded"} and
+ plenty of diagnostic information.
+
For higher-order matching the function is called @{ML_ind matchers in Unify}
implemented in the structure @{ML_struct Unify}. Also this function returns
--- a/ProgTutorial/Tactical.thy Wed Dec 02 03:46:32 2009 +0100
+++ b/ProgTutorial/Tactical.thy Wed Dec 02 17:06:41 2009 +0100
@@ -2311,7 +2311,8 @@
end*}
text {*
- The function @{ML bottom_conv in More_Conv} traverses first the the term and
+ If we regard terms as trees with variables and constants on the top, then
+ @{ML bottom_conv in More_Conv} traverses first the the term and
on the ``way down'' applies the conversion, whereas @{ML top_conv in
More_Conv} applies the conversion on the ``way up''. To see the difference,
assume the following two meta-equations.
Binary file progtutorial.pdf has changed