ProgTutorial/General.thy
changeset 379 d9e0ea61be78
parent 378 8d160d79b48c
child 380 0dc727055c11
--- a/ProgTutorial/General.thy	Mon Nov 09 09:25:51 2009 +0100
+++ b/ProgTutorial/General.thy	Mon Nov 09 09:48:38 2009 +0100
@@ -694,13 +694,13 @@
   @{ML_type "Type.tyenv"}, which maps schematic type variables to types (and
   sorts). Below we use the function @{ML_ind typ_unify in Sign} from the 
   structure @{ML_struct Sign} for unifying
-  the types @{text "?'a * nat"} and @{text "?'b list * ?'b"}. This will
+  the types @{text "?'a * ?'b"} and @{text "?'b list * nat"}. This will
   produce the mapping @{text "[?'a := ?'b list, ?'b := nat]"}.
 *}
 
 ML{*val (tyenv_unif, _) = let
-  val ty1 = @{typ_pat "?'a * nat"}
-  val ty2 = @{typ_pat "?'b list * ?'b"}
+  val ty1 = @{typ_pat "?'a * ?'b"}
+  val ty2 = @{typ_pat "?'b list * nat"}
 in
   Sign.typ_unify @{theory} (ty1, ty2) (Vartab.empty, 0) 
 end*}
@@ -709,8 +709,8 @@
   The value @{ML_ind empty in Vartab} stands for the empty type environment, 
   which is the value for starting the unification without any 
   instantiations.\footnote{\bf FIXME: what is 0?} 
-  We can print out the resulting 
-  type environment with the built-in function @{ML_ind dest in Vartab}.
+  We can print out the resulting type environment @{ML tyenv_unif} 
+  with the built-in function @{ML_ind dest in Vartab}.
 
   @{ML_response_fake [display,gray]
   "Vartab.dest tyenv_unif"
@@ -785,8 +785,8 @@
   "bool list * nat"}
 
   Be careful to observe the difference: use @{ML subst_type in Envir} 
-  for matchers and @{ML norm_type in Envir} for unifiers. To show the 
-  difference let us calculate the following matcher.
+  for matchers and @{ML norm_type in Envir} for unifiers. To make the 
+  difference explicit let us calculate the following matcher.
 *}
 
 ML{*val tyenv_match' = let
@@ -798,15 +798,16 @@
 
 text {*
   Now @{ML tyenv_unif} is equal to @{ML tyenv_match'}. Consider
-  again the type @{text "?'a * ?'b"}. If we apply 
-  @{ML norm_type in Envir} to the matcher we obtain
+  again the type @{text "?'a * ?'b"}, which we used in the unification
+  and matching problems. If we apply @{ML norm_type in Envir} to 
+  the matcher we obtain
 
   @{ML_response_fake [display, gray]
   "Envir.norm_type tyenv_match' @{typ_pat \"?'a * ?'b\"}"
   "nat list * nat"}
 
   which is not a matcher for the second matching problem, and if
-  we apply @{ML subst_type in Envir} to the unifier
+  we apply @{ML subst_type in Envir} to the unifier we obtain
 
   @{ML_response_fake [display, gray]
   "Envir.subst_type tyenv_unif @{typ_pat \"?'a * ?'b\"}"
@@ -819,9 +820,9 @@
   in @{ML_file "Pure/type.ML"}. The ``interface'' functions for them
   are in @{ML_file "Pure/sign.ML"}. Matching and unification produce type environments
   as results. These are implemented in @{ML_file "Pure/envir.ML"}.
-  This file also includes the substitution and normalisation functions. 
-  Environments are lookup tables that are implemented in 
-  @{ML_file "Pure/term_ord.ML"}.
+  This file also includes the substitution and normalisation functions,
+  that apply a type environment to a type. Type environments are lookup 
+  tables which are implemented in @{ML_file "Pure/term_ord.ML"}.
   \end{readmore}
 *}