recovered type matching, which was broken in 8a765db7e0f8 (see also 8a765db7e0f8, 2db1d3d2ed54);
authorwenzelm
Sat, 08 Nov 2014 15:01:05 +0100
changeset 58942 97f0ba373b1a
parent 58941 f09dd46352ba
child 58943 a1df119fad45
recovered type matching, which was broken in 8a765db7e0f8 (see also 8a765db7e0f8, 2db1d3d2ed54); NB: "match" operates on direct substitution without variable chasing, in contrast to "unify" (and Unify.matches!) which work on cascaded env;
src/Pure/type.ML
--- a/src/Pure/type.ML	Sat Nov 08 12:15:40 2014 +0100
+++ b/src/Pure/type.ML	Sat Nov 08 15:01:05 2014 +0100
@@ -436,11 +436,10 @@
 
 fun typ_match tsig =
   let
-    fun match (V as TVar (v, S), T) subs =
+    fun match (TVar (v, S), T) subs =
           (case lookup subs (v, S) of
             NONE =>
-              if V = T then subs
-              else if of_sort tsig (T, S) then Vartab.update_new (v, (S, T)) subs
+              if of_sort tsig (T, S) then Vartab.update_new (v, (S, T)) subs
               else raise TYPE_MATCH
           | SOME U => if U = T then subs else raise TYPE_MATCH)
       | match (Type (a, Ts), Type (b, Us)) subs =
@@ -457,9 +456,9 @@
   (typ_match tsig (U, T) Vartab.empty; true) handle TYPE_MATCH => false;
 
 (*purely structural matching*)
-fun raw_match (V as TVar (v, S), T) subs =
+fun raw_match (TVar (v, S), T) subs =
       (case lookup subs (v, S) of
-        NONE => if V = T then subs else Vartab.update_new (v, (S, T)) subs
+        NONE => Vartab.update_new (v, (S, T)) subs
       | SOME U => if U = T then subs else raise TYPE_MATCH)
   | raw_match (Type (a, Ts), Type (b, Us)) subs =
       if a <> b then raise TYPE_MATCH