ProgTutorial/General.thy
changeset 384 0b24a016f6dd
parent 383 72a53b07d264
child 385 78c91a629602
--- a/ProgTutorial/General.thy	Tue Nov 10 12:17:08 2009 +0100
+++ b/ProgTutorial/General.thy	Wed Nov 11 05:34:46 2009 +0100
@@ -1013,18 +1013,18 @@
   the latter @{ML_ind unify in Pattern} both implemented in the structure
   @{ML_struct Pattern}. An example for higher-order pattern unification is
 
-  \ldots
-*}
-
-ML{*let
-  val pat = @{term_pat "?X"}
-  val trm = @{term "a"}
-  val init = (Vartab.empty, Vartab.empty)
+  @{ML_response_fake [display, gray]
+  "let
+  val trm1 = @{term_pat \"\<lambda>x y. g (?X y x) (f (?Y x))\"}
+  val trm2 = @{term_pat \"\<lambda>u v. g u (f u)\"}
+  val init = Envir.empty 0
+  val env = Pattern.unify @{theory} (trm1, trm2) init
 in
-  Pattern.match @{theory} (pat, trm) init
-end *}
-
-text {*
+  pretty_env @{context} (Envir.term_env env)
+end"
+  "[?X := \<lambda>y x. x, ?Y := \<lambda>x. x]"}
+
+
   An assumption of this function is that the terms to be unified have 
   already the same type. In case of failure, the exceptions that are raised
   are either @{text Pattern}, @{text MATCH} or @{text Unif}.